数据库锁机制

我的读书笔记—Spring

数据库锁机制

按锁定的对象不同,一般可以分为表锁定和行锁定,前者对整个表进行锁定,后者只对某一行进行锁定。从并发事务锁定的关系上看,可以分为共享锁定和独占锁定。共享锁定会防止独占锁定,但是允许其他共享锁定。而独占锁定既防止其他独占锁定,也防止其他共享锁定。为了更改数据,数据库必须在更改数据的时候施加行独占锁定,INSERET,DELETE ,UPDATE,SELECT FOR UPDATE 语句都会隐式采用必要的行锁定,下面介绍一下Oracle的常用的5种锁定。

  • 行共享锁定:一般通过SELECT FOR UPDATE 语句隐式获得行共享锁定,在Oracle中,用户也可以通过LOCK TABLE IN ROW SHARE MODE语句显式获取行共享锁定。行共享锁定并不防止对数据的更改,但是可以防止其他会话获取独占锁定。允许进行多个并发的行共享和行独占锁定,还允许进行数据表的共享或者采用共享行独占锁定

  • 表共享锁定:通过LOCK TABLE IN SHARE MODE 语句显式获得。这种锁定可以防止其他会话获取行独占锁定(INSERT,UDPATE,DELETE),或者防止其他表共享行独占锁定或者表独占锁定。他允许在表中拥有多个行共享和表共享锁定。该锁定可以让会话具有对表事务级一致性访问,因为其他会话在用户提交或者回滚该事务并释放对该表的锁定之前不能更改这个被锁定的表。

  • 表共享行独占通过LOCK TABLE IN SHARE ROW EXECLUSIVE MODE 语句显式获得。这种锁定可以防止其他会话获取一个表共享,行独占或者表独占锁定,他允许其他行共享锁定。这种锁定类似于表共享锁定,只是一次只能对一个表放置一个表共享行独占锁定。如果A会话拥有该锁定,则B会话可以执行SELECT FOR UPDATE 操作,但如果B会话试图更新选择的行,则需要等待。

  • 表独占 通过LOCK TABLE IN EXECLUSIVE MODE 显式获得,这个锁定放置其他会话对该表的任何其他锁定。

发布了45 篇原创文章 · 获赞 8 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章