简单清晰理解数据库四大事务隔离级别 和 三种数据不一致情况

自己理解的事务隔离性

事务四大特性: 原子性 一致性 持久性 隔离性

数据库的四种隔离级别: 

Serializable 序列化 Repeatable read 可重复度 Read committed 读提交 Read uncommitted 读不提交(mysql)

这里先不说明这四个隔离级别是什么,先讨论一下由于数据库多任务同时操作数据产生的三种数据不一致的情况:

1.脏读:指的是一个事务读取到另一个事务没有提交或者回滚(没有读到最终数据),造成的事务读取的数据与数据库数据不一致的情况。数据库解决方法,加上行锁。如图: 解决方法 使用一个事务无法读取到另一个事务未持久化的数据(这里用持久化,因为参考其他的博客,有的说是没有提交,有的说又进行了回滚,总之就是没有持久化,这一解决方法就是传说的Read Commend)

2.不可重复读 :不可重复读 指的是一个事务在读取一个数据之后 其他事物对上一个事务读取的数据进行修改并提交,但是由于上一个事务的操作时间过长,导致该事务再次读取数据的时候读取的值前后不一致。这种情况虽然遵循了read commend (一个事务不能读取另一个事务未持久的数据,是的)但是还是发生了数据不一致。

解决方案,规定一个事务A不能修改另一个事务B已读取的数据,此时事务B还在进行中。(repeatable read)

3.幻读:在repeatable read隔离级别中,既然一个事务A无法修改事务B正在读取的数据,那事务A如果插入新的数据就不在repeatable read规定的范围内了吧,好。那就会发生事务A读取数据的数量是100 ,事务B插入了一条新的数据,结果实际数量是101,造成了事务A的两次读取数据的数量不一致,这就是幻读,解决方法 事务A对表操作时候其他事物无法对表进行操作 即加上表锁。传说中的serialable

 

说明了这几种数据不一致的情况,现在还差read uncommend没有说了,就是没有任何控制。另外对下面的结果就很好理解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值