read commited(RC) 与 repeatable read(RR)的异同

本文深入探讨了数据库事务的RC(读已提交)和RR(可重复读)隔离级别在不同场景下的锁行为,包括聚集索引、辅助索引、唯一索引和非唯一索引的情况。详细阐述了查询命中与未命中时的锁策略,以及更新操作对锁的影响,揭示了数据库在并发控制中的复杂性和精细度。
摘要由CSDN通过智能技术生成

聚集索引

数据如下

idname
0wt
1lsy
4dj

查询命中

update table_a set name=mg where id=4

如果查询到了lsy这个name,将会对 id 为 4 这一行加上X锁(排他锁),这一点RC与RR将会一致的

查询未命中

update table_a set name=mg where id=3

RC将不加任何锁
RR将在(1,4)区间内加上GAP锁

辅助唯一索引

student_noname
s001wt
s002lsy
s005dj

查询命中

由于是辅助唯一索引,其中可能涉及到回表查询

update table_b set name=mg where student_no=`s002`

RR与RC都将会对student_no=s002这一行加上X锁

student_noname
s001wt
s002lsy
s005dj

由于name不在B+数的索引中,所以存在回表查询,也就是会存在另外一张虚拟表,仅在辅助唯一索引时候出现的表

namestudent_no
wts001
lsys002
djs005
这张虚拟表将同样在S00这一行加入X锁

查询未命中

RC不需要加锁
RR将会在S002与S005之间加入GAP锁,

辅助非唯一索引

namescore
lsy100
dj99
dj99

查询命中

update table_c set score=50 where name='dj'

RC:
将在本身表格与回表表格中的dj这两行加上X锁
RR:
将在本身表格与回表表格中的dj这两行加上X锁
将在原表lsy到dj之间加上GAP锁
将在原表的dj后面到加上GAP锁

查询未命中

RC:不加锁
RR:在B+树的key值排序中,查询数据对应的前后之间加上GAP锁,与辅助唯一索引效果一致

无索引

RC: 对每一行加上X锁
RR:对每一行加上X锁,对每两行之间间隔加上GAP锁

聚集索引且范围查询

没有很明确的规律

辅助索引且范围查询

RC: 对原表符合范围的加上X锁
对回表中对应原表中加上了X锁的行,都加上X锁
RR: 比RC中多的便是
原表中符合范围的每一行区间内,加上GAP锁

修改索引值

对表格中的行加X锁,且对其主键那一行加上X锁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值