Mysql

2021-05-18  本文已影响0人  请叫我平爷

事务的特性

ACID


隔离引发的问题

脏读、幻读、不可重复读、丢弃修改

-丢弃修改:A、B事务对一个数据进行修改,A先修改,B后修改,B修改覆盖了A修改的

丢弃修改.png

事务隔离级别

读未提交、读提交、可重复读、串行化


LBCCMVCC

InnoDB默认级别时可重复读(Repeatable Read),为了解决该隔离级别下的幻读问题,提出了LBCCMVCC
LBCC为了解决当前读情况下的幻读。
MVCC为了解决普通读(快照读)的幻读。
当前读Locking Read 锁定读,读取当前数据的最新版本,并对这个数据加锁,防止别的事务更改来解决当前读的问题。在进行写操作的时候就需要进行当前读,读取数据记录的最新版本。
快照读Read View,在可重复读隔离级别下,我们可以把每次select当作一次快照读

LBCCLock-Based Concurrent Control 基于锁的并发控制

MVCCMulti-Version Concurrent Control 基于多版本的并发控制


问答

mysql隔离级别为什么默认可重复读?

因为Mysqlbinlog日志的格式在5.0之前,只有statement模式,记录的是修改sql语句,如果mysql默认隔离级别为读提交,主从同步会出现数据不一致的bug
例:
A提交事务为删除id>10的,B提交事务为insert一条id为11的数据,A在B提交后再提交。这时候master执行的顺序是先删后插,statement记录的是先插后删,slave同步到的binlog日志也是先插后删,这时候,主从同步不一致的bug就出来了。
推荐:
如果用mysql5.0+,隔离级别为读提交(Read commit),使用的是InnoDB引擎时,binlog日志模式推荐使用row模式

InnoDB引擎binlog日志有几种模式(Myisam引擎不支持事务)?

5.0之前只有statement,5.0之后有三种:

上一篇 下一篇

猜你喜欢

热点阅读