VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

LOCK TABLES

功能描述

如果需要保持数据库数据的一致性,可以使用LOCK TABLES来阻止其他用户修改表。

例如,一个应用需要保证表中的数据在事务的运行过程中不被修改。为实现这个目的,则可以对表使用进行锁定以防止数据不被并发修改。

LOCK TABLES使用后,会让接下来的SQL处于事务状态中,所以需要用UNLOCK TABLES手动释放锁并结束事务。

另外如果需要对当前session只允许读的话,那么还可以用FLUSH TABLES WITH READ LOCK实现,之后也需要用UNLOCK TABLES手动结束这个功能。

注意事项

该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。

语法格式

  • 加锁。

    LOCK TABLES namelist READ/WRITE
    
  • 让当前session处于只读表的状态。

    FLUSH TABLES WITH READ LOCK
    
  • 解锁。

    UNLOCK TABLES
    

参数说明

  • namelist

    要锁定的表的名称,可以有多个表。

  • READ/WRITE

    锁的模式。取值范围如下:

    • READ:读锁,只读取表而不修改的锁模式。
    • WRITE:写锁,这个模式保证其所有者(事务)是可以访问该表的唯一事务。

示例

1、创建测试表格并插入数据。

CREATE TABLE graderecord  
             (  
             number INTEGER,  
             name CHAR(20),  
             class CHAR(20),  
             grade INTEGER
             );
insert into graderecord values('210101','Alan','21.01',92);  

2、给表格加锁。

LOCK TABLES graderecord WRITE;

3、删除表中数据。

DELETE FROM graderecord WHERE name ='Alan';

4、开启另一个会话,查询表中数据。

gsql -p 5432 

此时会话被阻塞,不会返回查询结果。

SELECT * FROM graderecord;

5、解锁表,回显事务提交。

UNLOCK TABLES;
COMMIT

另一个会话中返回查询结果。

 number | name | class | grade
--------+------+-------+-------
(0 rows)