已解决
MYSQL事务隔离级别分析
来自网友在路上 165865提问 提问时间:2023-09-19 19:37:47阅读次数: 65
最佳答案 问答题库658位专家为你答疑解惑
MYSQL事务隔离级别分析
- 不可重复读和幻读的区别?
不可重复读和幻读的区别?
先理解几个概念
- 不可重复读
一个事务中,后续查询结果得到不同的数据,可被重复读隔离级别解决 - 幻影
出现在查询结果集中但不出现在较早查询的结果集中的行 - 幻读
一个事务中,先后执行两次查询,与此同时,另一个事务插入新行或更改行后提交,出现的数据不一致情况,比不可重复读更难防范,因为锁定第一个查询中的所有行无法阻止导致幻读出现的更改
再来看区别
- 很相似
- 前后两次查询看到的数据情况不一致
- 场景会有些不同
-
不可重复读
一般针对单行数据
可被可重复读隔离级别解决 -
幻读(除了序列化隔离级别外,都存在)
一般针对多行数据,范围查询
无法被可重复读隔离级别解决
幻读解决方案
1、InnoDB 间隙锁
-
用途
- 解决幻读
- 用于数据恢复和复制需要(较早版本中,5.1以前?)
-
加锁时机
- 通过范围条件加锁
- 使用相等条件请求给一个不存在的记录加锁
日志格式与复制模式
- 日志格式
- BINLOG
- 复制模式
- 基于语句的复制模式:加锁性能消耗比较大
- 基于行数据的复制:解决非安全SQL问题
- 混合模式
- 全局事务ID:解决主从同步问题
针对不安全SQL,对数据上锁,导致并发性能下降,如何解决
- innodb_locks_unsafe_for_binlog 的值设置为“on”,强制MySQL使用多版本数据一致性读,复制会出现数据不一致问题
- 通过使用“select * from source_tab … Into outfile”和“load data infile …”语句组合来间接实现,mysql就不会对表加锁了
- 基于行的BINLOG格式和基于行数据复制
InnoDB在不同隔离级别下一致性读及锁的差异
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"MYSQL事务隔离级别分析":http://eshow365.cn/6-9520-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: vue3父子组件之间相互数据响应
- 下一篇: Docker安装与卸载