非原创,引用自:http://qswoo.com/?p=21
Oracle五种表级排他锁的总结和归纳
锁的名称 | 对其它事务的约束 | 拥有此锁的事务的权利 | 其他事务的权利 | 加锁语句 |
共享锁 (Share Table Lock,S) | 允许其他事务对同一表上加共享锁 | 当一个表只有一个共享锁时,拥有此锁的事务可以进行数据更新操作(比如insert ,update等),但多个事务都对同一个表拥有共享锁时,任何一个事务都只能进行select操作。 | 只能有select操作 | Lock Table TableName In Share Mode; |
排他所 (Exclusive Table Lock,X) | 不允许其他事务对同一表进行任何加锁操作 | 拥有锁的事务可以进行表的任何操作 | 其他事务只能进行查询 | Lock Table TableName In Exclusive Mode; |
行级共享锁 (Row Share Table Lock,RS) | 不允许其他事务进行同一表上加排他锁(这是因为排他锁本身的特性:本来加了排他锁的事务就不允许其他事务对同一表加任何锁) | 拥有更新权 | 允许其他事务的更新权。 | SELECT . . . FROM TableName. . . FOR UPDATE OF . . . ; Lock Table TableName In Share Row Mode; |
行级排他锁 (Row Exclusive Table Lock,RX) | 允许其他事务进行同一表的其他行加行排他和行共享锁;不允许其他事务对表加共享锁或排他所 | 拥有锁的事务拥有更新权 | 其他事务拥有更新权 | INSERT INTO TableName. . . ; UPDATE TableName. . . ; DELETE FROM TableName. . . ; LOCK TABLE TableName IN ROW EXCLUSIVE MODE; |
共享行排他 (Share Row Exclusive Table Lock,SRX) | 不允许其他事务进行同一表的任何列加行排他锁,只能加行共享 | 锁的拥有事务对表有更新权 | 其他事务只有查询权 | Lock Table TableName In Share Row Exclusive Mode; |