RS: row share RX: row exclusive S: share SRX: share row exclusive X: exclusive??
( 1 ) RS 可以通過一下聲明方式來鎖定表的行
SELECT ... FROM table ... FOR UPDATE OF ... ;?
LOCK TABLE table IN ROW SHARE MODE;
一旦被 RS 鎖定,不允許再對表進行 LOCK TABLE table IN EXCLUSIVE MODE
INSERT INTO table ... ;
UPDATE table ... ;
DELETE FROM table ... ;?
LOCK TABLE table IN ROW EXCLUSIVE MODE;
一旦通過 RX 鎖定了表中的行,不允許對表進行下列操作
LOCK TABLE table IN SHARE MODE;?
LOCK TABLE table IN SHARE EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
( 3 ) s ( share table lock )可以通過以下方式鎖定表
LOCK TABLE table IN SHARE MODE (可以說有多個 S 鎖定一個表) ;
允許進行的操作,所有的查詢以及 SELECT ... FOR UPDATE, 和 LOCK TABLE ... IN SHARE MODE ,只允許本事務內更新數據( update ,這種情況也是只允許當前表上就一個 S 鎖)
不允許的操作
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
( 4 ) SRX 通過以下方式鎖定表
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
比 S 少了一點,這里只是允許一個 SRX 鎖定一個表
不允許的操作:
LOCK TABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
( 5 ) X 級別最高的鎖定形式: LOCK TABLE table IN EXCLUSIVE MODE;
只允許其他事務 QUERY 不允許其他操作。
DML Statement | Row Locks? | Mode of Table Lock |
SELECT ... FROM table | ? | ? |
INSERT INTO table ... | X | RX |
UPDATE table ... | X | RX |
DELETE FROM table ... | X | RX |
SELECT ... FROM table ... ???FOR?UPDATE OF ... | X | RS- |
LOCK TABLE table IN ... | ? | ? |
ROW SHARE MODE | ? | RS |
ROW EXCLUSIVE MODE | ? | RX |
SHARE MODE | ? | S |
SHARE EXCLUSIVE MODE | ? | SRX |
EXCLUSIVE MODE | ? | X |
這個表上很清楚