微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql的4种事务隔离级别

博客园里有篇文章谈到MysqL的4种事务隔离级别,哪4种?

1、未提交读(read uncommitted)
2、已提交读(read committed)
3、可重复读(repeatable read)
4、串行化(serializable)

文章解说了为何oracle、sql server认的隔离级别都是“已提交读”,而MysqL认是“可重复读”。但可惜这4种事务隔离级别有什么区别,却说的不够清楚。或者说,我没能读懂,又到网上搜了一下,做个笔记。

1、未提交读
也称为脏读吧。甲乙两人一起编辑同一份表,事务尚未提交,但彼此已经可以看到修改的结果。

2、已提交读
只有事务提交了,别人才能看到自己的修改结果。

3、可重复读
一个事务中,一份数据,不管读多少遍,结果都是一样的。
这比“已提交读”更严格一点了。甲开启了一个事务,在事务中对一份数据前后读了2遍,期间乙对该数据进行了编辑并提交,“已提交读”级别中,前后读取的结果会不一样;而“可重复读”级别里,一个事务里面,甲看到的都不变。
不过,这是好事还是坏事,很难说。如果是我,我选“已提交读”。可重复读,典型的两耳不闻窗外事,真实数据都已经变了,你还关在自己的事务里爽,可能会误导;事务完了以后,对真实的结果可能还会大吃一斤。


2022.08.24
可重复读在事务期间,是锁定记录的,不会出现该记录被别的事务修改的情况。

但可重复读无法锁定关联记录。假如有个统计,需要用到A、B记录,则有可能出现事务期间,A锁定,但B记录被别的事务修改的情况,则统计出来的结果,可能跟实际数据有出入。

解决这个问题,只能进一步,使用串行化。就看有没有这个必要性。


4、串行化
这就简单粗暴了,本来并行的数据库,只能排队进行操作了。不管读也好,修改也好,都得排队。结果当然绝对正确,但这效率,嗯。

参考资料:
互联网项目中mysql应该选什么事务隔离级别

五分钟搞清楚MySQL事务隔离级别

原文地址:https://www.jb51.cc/wenti/3284867.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐