mysql脏读-幻读-不可重复读-事物隔离级别

背景:

需要考虑高并发的场景

参考:

一文彻底读懂MySQL事务的四大隔离级别 - 云+社区 - 腾讯云 (tencent.com)

不可重复读和幻读的区别是什么-mysql教程-PHP中文网

过程:

1-脏读
事物A执行过程中读取到了事物B的未提交的数据
2-不可重复读
事物A同一条sql不同时间执行两次,每次都返回1个结果,但其中的字段数据不同[因为事物B修改了事物A查询的数据]
3-幻读
事物A同一条sql不同时间执行两次,返回了不同的结果集合,比如第一次查到了2行数据,第二次则查询到了3行数据[因为事物B插入了数据]


不可重复读和幻读的区别:
不可重复读的重点是修改;同样的条件,第1次和第2次读取的值不一样。
幻读的重点在于新增或者删除;
同样的条件, 第1次和第2次读出来的记录数不一样。

解决方案:
1-读未提交-READ-UNCOMMITTED[隔离级别最低--会有脏读问题]
2-读已提交-READ-COMMITTED[解决了脏读--但是会产生不可重复读问题]
3-可重复读-REPEATABLE READ[解决了不可重复读问题,部分情况下也解决了幻读问题,但是仍有可能产生幻读]
4-串行化-SERIALIZABLE-解决了脏读-不可重复读-幻读问题,之前的三种方式都存在不同程度的并发问题
但是串行化的性能很低

sqlserver事物隔离级别默认是读已提交
mysql事物隔离级别默认是不可重复读

遗留:

实现原理,和锁联系起来进一步理解。

猜你喜欢

转载自blog.csdn.net/Elephantpretty/article/details/124559748