MySQL可重复读隔离级别:真的能完全避免幻读吗?
创作时间:
作者:
@小白创作中心
MySQL可重复读隔离级别:真的能完全避免幻读吗?
引用
CSDN
1.
https://blog.csdn.net/qq_45981373/article/details/139396954
MySQL InnoDB引擎的默认隔离级别是「可重复读」,这个级别在很大程度上避免了幻读现象,但并不是完全解决了。本文将通过两个具体场景来说明这个问题。
前言
在可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的。对于普通select语句(快照读),是通过MVCC(多版本并发控制)方式解决了幻读;而对于select ... for update等语句(当前读),是通过next-key lock(记录锁+间隙锁)方式解决了幻读。但是,在某些特殊情况下,幻读现象仍然可能发生。
第一个发生幻读现象的场景
以一张表t_stu为例:
事务A执行查询id = 5的记录,此时表中没有该记录:
# 事务 A
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t_stu where id = 5;
Empty set (0.01 sec)
然后事务B插入一条id = 5的记录并提交:
# 事务 B
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t_stu values(5, '小美', 18);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
此时,事务A尝试更新id = 5的记录。虽然事务A看不到这条记录,但更新操作仍然会成功,因为这条记录的trx_id隐藏列的值会被设置为事务A的事务ID。之后,事务A再次查询id = 5的记录时,就能看到这条记录了,这就是幻读现象。
第二个发生幻读现象的场景
在这个场景中:
- T1时刻:事务A执行快照读语句
select * from t_test where id > 100,得到3条记录。 - T2时刻:事务B插入一条
id = 200的记录并提交。 - T3时刻:事务A执行当前读语句
select * from t_test where id > 100 for update,得到4条记录,发生了幻读。
为了避免这类特殊场景下的幻读现象,建议在开启事务后立即执行select ... for update等当前读语句,因为这会为记录添加next-key lock,从而阻止其他事务插入新记录。
总结
MySQL InnoDB引擎的可重复读隔离级别通过以下方式避免幻读:
- 对于快照读(普通
select语句),使用MVCC机制。 - 对于当前读(
select ... for update等语句),使用next-key lock机制。
但是,这两个解决方案并不能完全避免幻读。例如:
- 当事务A更新了事务B插入的记录时,前后两次查询结果不一致,会发生幻读。
- 如果事务先执行快照读,然后其他事务插入新记录,后续的当前读会发现记录条目不一致,也会发生幻读。
因此,MySQL的可重复读隔离级别只是在很大程度上避免了幻读,而不是完全解决。要避免这类特殊场景下的幻读,建议在事务开始后立即执行当前读语句。
热门推荐
如何有效实施团队目标管理步骤?
足金与999金的区别,你真的了解吗?看完涨知识了!
教你如何避免冬天头屑多的问题
怎么判断是不是支原体肺炎还是普通感冒
当归是什么植物?探秘中药圣品(从历史、种类、功效到食用方式,你需要了解的一切)
“吃饭七分饱”错了?医生告诫:过了70岁,吃饭要尽量做到这5点
解答百年谜题,胡宏镇团队Cell论文揭示肠道神经元感知压力、炎症以帮助消化的机制
氟哌酸和诺氟沙星区别是什么
雷州石狗:两代人的传承与创新
年休假一般应如何安排?一起来看→
从“优惠车票”到“无忧出行”的温暖实践
钢化炉加工不同颜色玻璃的工艺调整方法
“恶意讨薪”背后的荒谬:欠薪企业逍遥法外,农民工维权困境重重
五香粉制作配方!解锁厨房香料的秘密,让每一道菜都焕发新生。
从原材料到成品:锂离子电池的制造过程
早晚咳嗽的厉害是什么原因
合肥新疆15天旅游攻略_合肥自駕游新疆25天路線怎么走
大阪樱花vs浦和红钻:一场充满悬念的J联赛对决
什么制冷片性能最好?
【CVIA综述】面向普通心脏病专家的体位性心动过速综合征(POTS)的概述
彩椒成 “蔬菜新贵”
农信系统改革新进展!河南农商银行获批筹建 多地打响2025改革“发令枪”
童年智识的萌芽与成长:解读6~12岁孩子的成长规律
首个电竞国家标准出台,为新基建注入新动能
风油精:婴幼儿禁用!孕妇禁用!不要口服!
孕妇闻风油精有风险,这些注意事项要记牢
已经凝固的水泥怎么去除
班章茶的口感特点,茶气刚劲/浓酽甘爽/回甘强烈
新加坡生态农业行业市场现状与发展前景分析
中国空间站在轨建造第二战打响!长征七号遥三火箭成功发射天舟二号货运飞船