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);
12. --给示例表格。
13. openGauss=# LOCK TABLES graderecord WRITE;
15. --删除示例表格。
16. openGauss=# DELETE FROM graderecord WHERE name ='Alan';
18. openGauss=# UNLOCK TABLES;
