mysql 可重复读 死锁_可重复读隔离级别里的可能死锁

在今天的文章里我想谈论下在可重复读隔离级别(Transaction Isolation Level Repeatable Read)里,当你运行事务时可能引起的2类死锁。当你使用可重复读(Repeatable Read)隔离级别设置你的事务,SQL Server对读取数据把持需要的共享锁(Shared Locks)直到事务的结束(COMMIT或ROLLBAK)。然后当你尝试修改读取的数据(通过UPDATE语句),如果同样的事务多次并发运行,它会英气不同类型的死锁。

循环死锁(Cycle Deadlock)

循环死锁是其中一个最常见的死锁——你就以不同顺序访问资源(例如不同表),最后每个查询等待另一个。使用可重复读隔离级别,但你用多个事务只读写一个表时,也是有可能引起循环死锁。我们来看第1个事务的T-SQL代码:

1 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

2 GO

3

4 BEGIN TRANSACTION

5

6 SELECT * FROMPerson.Person7 WHERE ModifiedDate = '20030208'

8

9 UPDATEPerson.Person10 SET FirstName = '...'

11 WHERE ModifiedDate = '20030208'

12

13 SELECT * FROMPerson.Person14 WHERE ModifiedDate = '20030209'

15

16 UPDATEPerson.Person17 SET FirstName = '...'

18

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值