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事务隔离级别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值