数据库四种隔离级别

数据库四种隔离级别
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
数据库四种隔离级别