MySQL为什么使用可重复读隔离级别?
历史原因:早期MySQL的binlog日志只有statement格式,在读已提交的隔离界别下,binlog日志存在bug,会导致主从复制不一致的情况。因此默认的隔离级别使用可重复读。
bug:binlog日志中记录的语句顺序和原有顺序会不一致。先删除后插入的操作,同步导从库就变成了先插入后删除的操作了。
MySQL5.1版本之后binlog日志格式还支持了row,mixed ,通常使用读已提交 + row 可以实现更高的并发。对于其中的幻读、不可重复读问题在业务层做保护即可。
binlog的statement模式不适合做主从复制。比如一些函数每次执行结果会不一致。uuid()等。
隔离级别设置和查询方式:
- 当前session设置:
set session transacton isolation level read uncommitted;
set session transacton isolation level read committed;
set session transacton isolation level repeatable read;
set session transacton isolation level serializable;
- 查询当前隔离级别
select @@global.tx_isolation isolation;
- 全局设置
set global transacton isolation level read uncommitted;
set global transacton isolation level read committed;
set global transacton isolation level repeatable read;
set global transacton isolation level serializable;
- 查询全局隔离级别
select @@global.tx_isolation isolation;
本文作者:森林中大鸟
本文链接:https://www.cnblogs.com/wenshichen/p/17376604.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步