锁状态确定了对锁的所有者允许的访问类型,以及对锁定数据资源的并发用户许可的访问类型。下面的列表说明了可用的锁状态,按照递增控制排序:
锁状态(模式): 意向无(Intent None,IN)
适用对象: 表空间和表
描述: 锁的拥有者可以读取锁定表中的数据(包括未提交数据),但不能更改这些数据。在这种模式中,锁的拥有者不获取行级别的锁;因此,其它并发应用程序可以读取和更改表中的数据。
锁状态(模式): 意向共享(Intent Share,IS)
适用对象: 表空间和表
描述: 锁的拥有者可以读取锁定表中的数据,但不能更改这些数据。同样,因为锁的拥有者不获取行级别锁;所以,其它并发的应用程序仍可以读取和更改表中的数据。(当事务拥有表上的意向共享锁时,就在它所读取的每个行上进行共享锁定。)当事务不传达更新表中行的意图时,就获取这种锁。
锁状态(模式): 下一键共享(Next Key Share,NS)
适用对象: 行
描述: 锁拥有者和所有并发的事务都可以读(但不能更改)锁定行中的数据。这种锁用来在使用“读稳定性”或“游标稳定性”事务隔离级别读取的数据上代替共享锁。
锁状态(模式): 共享(S)
适用对象: 表和行
描述: 锁拥有者和任何其它并发的事务都可以读(但不能更改)锁定的表或行中的数据。只要表不是使用共享锁锁定的,那么该表中的单个行可以使用共享锁锁定。但是,如果表是用共享锁定的,则锁拥有者不能在该表中获取行级别的共享锁。如果表或行是用共享锁锁定的,则其它并发事务可以读取数据,但不能对它进行更改。
锁状态(模式): 意向互斥(Intent Exclusive,IX)
适用对象: 表空间和表
描述: 锁拥有者和任何其它并发的应用程序都可以读取和更改被锁定表中的数据。当锁拥有者从表读取数据时,它在所读取的每一行上获取一个共享锁,而在它更新的每一行上获取更新和互斥锁。其它并发的应用程序可以读取和更新锁定的表。当事务传达更新表中行的意图时,就获取这种锁。(SELECT FOR UPDATE、UPDATE ... WHERE 和 INSERT 语句传达更新的意图。)
锁状态(模式): 带意向互斥的共享(Share With Intent Exclusive,SIX)
适用对象: 表
描述: 锁拥有者可以读取和更改被锁定表中的数据。锁拥有者在它更新的行上获取互斥锁,但不获取它读取的行上的锁;因此,其它并发的应用程序可以读取但不能更新被锁定表中的数据。
锁状态(模式): 更新(Update,U)
适用对象: 表和行
描述: 锁的拥有者可以更新被锁定表中的数据,并且锁的拥有者在它所更新的任何行上自动获得互斥锁。其它并发的应用程序可以但不能更新被锁定表中的数据。
锁状态(模式): 下一键互斥(Next Key Exclusive,NX)
适用对象: 行
描述: 锁的拥有者可以读取但不能更新被锁定的行。当在表的索引中插入或删除行时,表中的下一行上将获得这种锁。
锁状态(模式): 下一键弱互斥(Next Key Weak Exclusive,NW)
适用对象: 行
描述: 锁的拥有者可以读取但不能更新被锁定的行。当向非目录表的索引插入行时,表中下一行上就获得这种锁。
锁状态(模式): 互斥(Exclusive,X)
适用对象: 表和行
描述: 锁的拥有者可以读取和更改被锁定的表或行中的数据。如果获取了互斥锁,则只允许使用“未提交的读”隔离级别的应用程序访问被锁定的表或行(多行)。对于用 INSERT、UPDATE 和/或 DELETE 语句操作的数据资源,将获取互斥锁。
锁状态(模式): 弱互斥(Weak Exclusive,WE)
适用对象: 行
描述: 锁的拥有者可以读取和更改被锁定的行。当向非目录表中插入行时,该行上将获得这种锁。
锁状态(模式): 超级互斥(Super Exclusive,Z)
适用对象: 表空间和表
描述: 锁的拥有者可以更改表、删除表、创建索引或删除索引。当事务尝试执行上述任何一种操作时,表上就自动获得这种锁。在除去这个锁之前,不允许其它并发事务读取或更新该表。
-----------------------------------
详解: