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的可重复读隔离级别只是在很大程度上避免了幻读,而不是完全解决。要避免这类特殊场景下的幻读,建议在事务开始后立即执行当前读语句。
热门推荐
胃窦炎伴糜烂要怎么治才能治愈
水煮蛋时间要煮多久?电锅水煮蛋怎么煮?可以放多久?
“情绪价值”被滥用?我们该如何正确打开
38岁肺癌患者案例:吸烟的危害与戒烟的必要性
外观检测如何帮助防止假冒伪劣农产品
如何在 Windows 11 中更改用户名(6种最简单的方法)
如何从官网下载MySQL数据库并安装程序
孩子经常肚子痛,过一会就好?这种腹痛很常见
S7-1200与S7-1500中优化的DB块和标准DB块的区别
尼尔斯哪里体现了勇敢?尼尔斯:直面挑战,展现惊人勇敢!!
肠易激综合征的常见症状及如何通过饮食进行管理?
老姜的功效与作用、禁忌和食用方法
如何筛选重复的题数据库
户外运动防晒全攻略:从选择到使用,全方位保护你的肌肤
"然后、接下来"英文的7种说法!next? and then?
世界数学家排名:世界历史上最伟大的十位数学等
AI赋能,职引未来:新疆举办2025年高校毕业生春季招聘大会
越休闲、越讲究?揭底“休闲风”穿搭的优雅技巧,很多人一知半解
二手佳能5D4低价出售?当心这些陷阱!
中国干细胞新药爆发前夜 即将迎来黄金十年?
从神话传说中蛇的“真身”,看古代日本人的信仰和生活
为什么我劝你,做个“间歇性堕落”的成年人?
消火栓箱安装规范要求
近40年过去,臭氧层自我恢复超预期,到2045年可能完全恢复
2024年中国六维力传感器行业供需态势、市场现状及发展前景预测报告
只有不断前进的人才会知道:《进击的巨人》中的生命、暴力与自由
细胞实验-细胞表型检测实验有哪些?
股票市场中的射击之星,形态解读与交易策略
插电混动车纯电行驶和亏电行驶的驾驶感受有何差异?一文说清楚
雷军人物简介:从技术到商业的跨界传奇