行级锁
SELECT … FOR UPDATE [OF columns] [WAIT n | NOWAIT];说明: OF 子句用于指定即将更新的列,即锁定行上的特定列。WAIT 子句指定等待其他用户释放锁的秒数,防止无限期的等待
表级锁
使用命令显示地锁定表,应用表级锁的语法是: LOCK TABLE table_name IN mode MODE;
行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁
共享锁(SHARE)
锁定表,仅允许其他用户查询表中的行
禁止其他用户插入、更新和删除行
多个用户可以同时在同一个表上应用此锁
共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁
排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表
RS (Row share table lock)
以下的操作会产生RS lock
Select * from tab for update.
LOCK TABLE table IN ROW SHARE MODE;
RS不允许的操作:
LOCK TABLE table IN EXCLUSIVE MODE;
RX (RowExclusive Table Locks)
1:INSERT,UPDATE ,DELETE
2:LOCK TABLEtable IN ROW EXCLUSIVE MODE;
LOCKTABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCKTABLE table IN EXCLUSIVE MODE;
S (ShareTable Locks )
LOCK TABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE ROW EXCLUSIV EMODE;
LOCK TABLE table IN EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
SRX (ShareRow Exclusive Table Locks)
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
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;
X(Exclusive Table Locks )
LOCK TABLE table IN EXCLUSIVE MODE;
不允许所有的操作
事务处理
在oracle中commit,rollback,savepoint这三条语句可以完 ,使用savepoint可以做到部分撤消事务。
锁模式
锁模式 | 锁描述 | 解释 | SQL操作 |
0 | none | 空 | 空 |
1 | NULL | 空 | select |
2 | SS(Row-S) | 不用许获得6级锁,允许获得2、3、4、5级锁;允许做DML、alter操作,不允许做drop、truncate。 | ROW SHARE |
3 | SX(Row-X) | 不允许获得4、5、6级锁,允许获得2、3级锁;允许做DML操作,不允许做alter、drop、truncate操作。 | Insert、Update、Delete、for update、ROW EXCLUSIVE |
4 | S(Share) | 不允许获得3、5、6级锁,允许获得2、4级锁;不允许DML、DDL操作。 | SHARE |
5 | SSX(S/Row-X) | 不允许获得3、4、5、6级锁,允许获得2级锁;不允许DML、DDL操作。 | SHARE ROW EXCLUSIVE |
6 | X(Exclusive) | 不允许获得任何锁,不允许任何操作。 | Alter、Drop、Truncate、EXCLUSIVE |