锁
如果需要保持数据库数据的一致性,可以使用LOCK TABLE来阻止其他用户修改表。
例如,一个应用需要保证表中的数据在事务的运行过程中不被修改。为实现这个目的,则可以对表使用进行锁定。这样将防止数据不被并发修改。
LOCK TABLE只在一个事务块的内部有用,在事务结束时就会被释放。
语法格式
1. LOCK [ TABLE ] name IN lock_mode MODE
参数说明
- name
要锁定的表的名称。 - lock_mode
锁的模式。基本的有:
-
ACCESS EXCLUSIVE
这个模式保证其所有者(事务)是可以访问该表的唯一事务。也是缺省锁模式。 - ACCESS SHARE
只读取表而不修改的锁模式。
示例
在执行删除操作时对一个表进行ACCESS EXCLUSIVE锁。
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. insert into graderecord values('210102','Ben','21.01',62);
12. insert into graderecord values('210103','Brain','21.01',26);
13. insert into graderecord values('210204','Carl','21.02',77);
14. insert into graderecord values('210205','David','21.02',47);
15. insert into graderecord values('210206','Eric','21.02',97);
16. insert into graderecord values('210307','Frank','21.03',90);
17. insert into graderecord values('210308','Gavin','21.03',100);
18. insert into graderecord values('210309','Henry','21.03',67);
19. insert into graderecord values('210410','Jack','21.04',75);
20. insert into graderecord values('210311','Jerry','21.04',60);
22. --启动进程。
23. openGauss=# START TRANSACTION;
25. --给示例表格。
26. openGauss=# LOCK TABLE graderecord IN ACCESS EXCLUSIVE MODE;
28. --删除示例表格。
29. openGauss=# DELETE FROM graderecord WHERE name ='Alan';
31. openGauss=# COMMIT;
