B数据库锁

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

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

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

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

语法格式

  • 上锁

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

    1. FLUSH TABLES WITH READ LOCK
  • 解锁

    1. UNLOCK TABLES

参数说明

  • namelist

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

  • READ/WRITE

    锁的模式。有:

    • READ

      读锁,只读取表而不修改的锁模式。

    • WRITE

      写锁,这个模式保证其所有者(事务)是可以访问该表的唯一事务。

示例

在执行删除操作时对一个表进行WRITE锁。

  1. --创建示例表格。
  2. openGauss=# CREATE TABLE graderecord
  3. (
  4. number INTEGER,
  5. name CHAR(20),
  6. class CHAR(20),
  7. grade INTEGER
  8. );
  9. --插入数据。
  10. openGauss=# insert into graderecord values('210101','Alan','21.01',92);
  11. --给示例表格。
  12. openGauss=# LOCK TABLES graderecord WRITE;
  13. --删除示例表格。
  14. openGauss=# DELETE FROM graderecord WHERE name ='Alan';
  15. openGauss=# UNLOCK TABLES;