1. 行级锁:
a. FOR UPDATE:
-- 在事务中显式锁定行,其他事务无法在该事务未释放锁之前修改相同的行
BEGIN;
SELECT * FROM your_table WHERE some_condition FOR UPDATE;
-- 执行一些操作
COMMIT; -- 释放锁
b. FOR SHARE:
-- 在事务中显式锁定行,其他事务可以读取但无法在该事务未释放锁之前修改相同的行
BEGIN;
SELECT * FROM your_table WHERE some_condition FOR SHARE;
-- 执行一些操作
COMMIT; -- 释放锁
2. 表级锁:
a. ACCESS SHARE:
-- 在事务中显式锁定整个表,其他事务可以读取但无法在该事务未释放锁之前修改表
BEGIN;
LOCK TABLE your_table IN ACCESS SHARE MODE;
-- 执行一些操作
COMMIT; -- 释放锁
b. ROW SHARE:
-- 在事务中显式锁定整个表,其他事务可以读取但无法在该事务未释放锁之前修改表
BEGIN;
LOCK TABLE your_table IN
**ROW SHARE MODE;**
-- 执行一些操作
COMMIT; -- 释放锁
c. ROW EXCLUSIVE:
-- 在事务中显式锁定整个表,其他事务无法在该事务未释放锁之前读取或修改表
BEGIN;
LOCK TABLE your_table IN ROW EXCLUSIVE MODE;
-- 执行一些操作
COMMIT; -- 释放锁
d. SHARE UPDATE EXCLUSIVE:
-- 在事务中显式锁定整个表,其他事务可以读取但无法在该事务未释放锁之前修改表
BEGIN;
LOCK TABLE your_table IN SHARE UPDATE EXCLUSIVE MODE;
-- 执行一些操作
COMMIT; -- 释放锁
e. SHARE:
-- 在事务中显式锁定整个表,其他事务可以读取但无法在该事务未释放锁之前修改表
BEGIN;
LOCK TABLE your_table IN SHARE MODE;
-- 执行一些操作
COMMIT; -- 释放锁
f. SHARE ROW EXCLUSIVE:
-- 在事务中显式锁定整个表,其他事务可以读取但无法在该事务未释放锁之前修改表
BEGIN;
LOCK TABLE your_table IN SHARE ROW EXCLUSIVE MODE;
-- 执行一些操作
COMMIT; -- 释放锁
g. EXCLUSIVE:
-- 在事务中显式锁定整个表,其他事务无法在该事务未释放锁之前读取或修改表
BEGIN;
LOCK TABLE your_table IN EXCLUSIVE MODE;
-- 执行一些操作
COMMIT; -- 释放锁
这些显式锁定操作允许你以精确的方式控制并发访问。请注意,在使用显式锁定时,一定要小心,以免引起死锁和性能问题。
转载请注明出处:http://www.zyzy.cn/article/detail/8232/PostgreSQL