数据库隔离级别[对应封锁协议]

本文详细介绍了数据库事务的四种隔离级别:读未提交、读已提交、可重复读及序列化。针对每种级别,阐述了其对应的封锁协议,并讨论了可能出现的问题如脏读、不可重复读和幻读等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.读未提交(read uncommit)

一级封锁协议(读取数据的时候不加锁,更新的时候整个加X锁)

b事物执行到一半,a事物不检测锁直接读取,结果b事物回滚了,导致a事物读出了一个错的结果,这就是脏读。

2.读已提交(read committed)

二级封锁协议(读取数据的时候加S锁,更新的时候加X锁)

a事物每次读取的时候都会尝试获取s锁,如果b事物在更新,则a阻塞等待b事物释放。

解决了脏读的问题。

因为a读取完毕以后直接释放,如果a事物有两次读取操作,而在这期间b更新了数据,

会导致两次结果不一样。这就是不可重复读

3.可重复读(repeatable read)

三级封锁协议(对读取数据的整个事务加S锁,更新的时候整个加X锁)

因为a读取操作整个加了s锁,所以在此期间b事物不能获得x锁。这样就解决了不可重复读问题。

幻读a在读表的时候,b往表里删除行,导致a统计的结果和表里现在的不一致,好像发生了幻觉。(幻读来源于表行的增加或删除,解决幻读只能对表加锁)

4.序列化(sirializable)

锁全表(事物不并发执行)

解决了幻读现象。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值