更新锁,共享锁,排他锁,意图锁定,ix,is

#Isolation&lock(锁)


更新锁(Update locks)

更新锁定是共享锁定和排他锁定的混合。共享锁是在DML执行之前进行更改之前使用的。其他事务可以读取锁定的数据,但不能修改它。一旦修改开始,它就成为一个排他锁,其他事务直到事务结束后才能读取和更新锁定的数据。因此,更新锁可以避免造成死锁。同一时间只有一个更新锁可以锁定数据,类似于排他锁。但不同之处在于,更新锁只能锁定自身,而不能修改底层数据。在修改数据之前,可以将它转换为排他锁,这可以通过提示UPDLOCK更新锁来实现。

共享锁(Shared locks)

共享锁在数据读取悲观(慢节奏)模块下并行持有。共享锁操作的同时保持其他事务可访问,但不修改锁定的数据。除非事务是通过提示符(READCOMMITTED, READCOMMITTEDLOCK)或隔离级别等于或大于可重复读(Repeatable READ)完成的,否则锁定的数据将在共享锁READ完成后被释放。在一般情况下,您不会看到共享锁,因为SELECT在系统运行期间释放了锁。dm_tran_locks命令选择。这就是为什么需要额外的提示来查看锁的类型。

排他锁(eXclusive locks)

排他锁定用于修改数据并防止其他事务被修改的事务中。您只能通过NOLOCK的提示读取锁定的数据或未确认的隔离级别数据。SQL Server在修改数据时使用独占锁定。锁定其他事务的请求将被拒绝,直到事务关闭。一个资源只能有一个排他锁。当一个事务持有资源上的排他锁时,其他事务无法读取该资源。因此,这个锁限制了并发行数。

意图锁定(Intent locks)

有意锁定意味着当一个事务通知另一个事务时,它有锁定数据的“意图”,所以它就像名称一样。它确保事务获得要修改的正确数据,防止其他事务获得更高级别的锁。这意味着您打算在获得锁或表上的行之前锁定一个Page。这可以防止其他事务在表上放置排他锁并试图解锁行或页。包含锁定被放置在页和表上,以防止其他事务锁定数据。

锁兼容性矩阵 (Lock Compatibility Matrix)
通过锁兼容性矩阵,可以将同样好的资源锁与其他锁模块进行比较。
在这里插入图片描述
图片摘自墨大adb课件

IS和IX

  • 「意向共享锁(IS)」:事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
  • 「意向排他锁(IX)」:事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

如果一个事务请求的锁模式与当前的锁兼容,InnoDB就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。


如果博主的这篇文章对您有帮助,点赞支持一下呀。
如果觉得文章写的可以,转载请带上我哦!
康康的笔记
图片从各个网站转载,如有侵权请联系删除!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值