数据库四种隔离级别

本文详细介绍了数据库中四种隔离级别的概念及其实现原理。通过引入X锁和S锁机制,逐步解析从最低隔离级别Read uncommitted到最高级别Serializable的事务处理过程,帮助读者理解如何避免脏读、不可重复读等问题。

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

数据库四种隔离级别
1、没锁的情况下,线程修改的数据可能会被并行的线程修改的数据覆盖掉。
2、改进让两个线程更改为串行,加入锁的概念,先称呼为X锁(在涉及写的情况,则加入X锁)
3、获取脏数据
解决这种情况,加入共享锁(Share Lock),先称呼S锁,S锁与X锁(排他锁)是有一定区别的,S锁主要用来读取数据,如果一个数据加了X锁,不允许获取S锁。一个数据被加了S锁,就无法被X锁。当然S锁是针对于读数据,所以在读取完毕以后,立马释放S锁。(此处有一点问题,后续解释)
4、数据重复读
遵守上诉规则,还是出现了数据不一致性。所以在读的时候,也需要一直锁定,等到事物提交后续释放S锁。所以刚红字描述跟这里的有冲突。
5、幻觉出现
遇到这种情况,只能出终极大招,就是所有的数据操作,全部串行化。
总结了一下, 分为了这么几种情况:
1. 写数据时加上X锁,直到事务结束, 读的时候不加锁。
虽然能够避免丢失数据, 但是可以读到没有提交或者回滚的内容 (脏数据), 这其实就是数据库最低的事务隔离级别 --- Read uncommitted
2. 写数据的时候加上X锁, 直到事务结束, 读的时候加上S锁, 读完数据立刻释放。
这能避免“丢失数据”和“脏数据”, 但是会出现“不可重复读”的问题 , 这是第二级的事务隔离级别 -- Read committed
3. 写数据的时候加上X锁, 直到事务结束, 读数据的时候加S锁, 也是直到事务结束。
这能避免“丢失数据”和“脏数据”, “不可重复读”三个问题 , 这是数据库常用的隔离级别 --
Repeatable read

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值