Oracle数据库常用的5种锁定

来源:互联网 发布:基于java的2048小游戏 编辑:程序博客网 时间:2024/06/15 19:42

  • 行共享锁定:一般通过SELECTFOR UPDATE语句隐式获得行共享锁定,在Oracle中用户也可以通过LOCKTABLE IN ROW SHARE MODE语句显式获得行共享锁定。行共享锁定并不防止对数据行进行更改的操作,但是可以防止其他会话获取独占性数据表锁定。允许进行多个并发的行共享和行独占性锁定,还允许进行数据表的共享或者采用共享行独占锁定。
  • 行独占锁定:通过一条INSERTUPDATEDELETE语句隐式获取,或者通过一条LOCKTABLE IN ROW EXCLUSIVE MODE语句显式获取。这个锁定可以防止其他会话获取一个共享锁定、共享行独占锁定或独占锁定。
  • 表共享锁定:通过LOCKTABLE IN SHARE MODE语句显式获得。这种锁定可以防止其他会话获取行独占锁定(INSERTUPDATEDELETE),或者防止其他表共享行独占锁定或表独占锁定,它允许在表中拥有多个行共享和表共享锁定。该锁定可以让会话具有对表事务级一致性访问,因为其他会话在用户提交或者回溯该事务并释放对该表的锁定之前不能更改这个被锁定的表。
  • 表共享行独占:通过LOCKTABLE IN SHARE ROW EXCLUSIVE MODE语句显式获得。这种锁定可以防止其他会话获取一个表共享、行独占或者表独占锁定,它允许其他行共享锁定。这种锁定类似于表共享锁定,只是一次只能对一个表放置一个表共享行独占锁定。如果A会话拥有该锁定,则B会话可以执行SELECTFOR UPDATE操作,但如果B会话试图更新选择的行,则需要等待。
  • 表独占:通过LOCKTABLE IN EXCLUSIVE MODE显式获得。这个锁定防止其他会话对该表的任何其他锁定。