MySQL事务隔离级别

2021-07-27  本文已影响0人  晚歌歌

事务ACID特性

事务并发问题

不可重复读和幻读区别:不可重复读关注读取的数据本身对比,幻读关注读取数据的条数对比

事务隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别,不同的隔离级别对事务的处理不同。

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
读已提交(read-committed)
可重复读(repeatable-read) 是(INNODB不会)
串行化(serializable)

MySQL的默认隔离级别是可重复读,但互联网项目中一般用读已提交

采用可重复读历史原因:
主从复制是基于binlog复制的,binlog有以下三种格式:

MySQL 5.7.7 之前,binlog 的默认格式都是 STATEMENT,在 5.7.7 及更高版本中,binlog_format 的默认值才是 ROW
MySQL在5.1.5这个版本以前,binlog只支持STATEMENT这种格式,而这种格式在读已提交这个隔离级别下主从复制是BUG的,可能导致主从数据不一致,解决方法:

由于历史原因MySQL选择了第一种方法

案例:读已提交级别


image.png

INNODB可重复读解决幻读

INNODB可重复读采用 Next-key 锁机制,解决幻读

上一篇 下一篇

猜你喜欢

热点阅读