数据库锁机制

6 篇文章 0 订阅

我的读书笔记—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 显式获得,这个锁定放置其他会话对该表的任何其他锁定。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值