总是忘记的场景:MySQL InnoDB四个事务级别 与 脏读不重复读幻读

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总是忘记的场景:MySQL InnoDB四个事务级别 与 脏读不重复读幻读相关的知识,希望对你有一定的参考价值。

MySQL InnoDB事务隔离级别脏读、可重复读、幻读

mysql InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ)。

·        未提交读(READUNCOMMITTED)。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)。

·        提交读(READCOMMITTED)。本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。

·        可重复读(REPEATABLEREAD)。在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象(稍后解释)。

·        串行化(SERIALIZABLE)。读操作会隐式获取共享锁,可以保证不同事务间的互斥。

四个级别逐渐增强,每个级别解决一个问题。

·        脏读,最容易理解。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据。

·        不重复读。解决了脏读后,会遇到,同一个事务执行过程中,另外一个事务提交了新数据,因此本事务先后两次读到的数据结果会不一致。

·        幻读。解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。

以上是关于总是忘记的场景:MySQL InnoDB四个事务级别 与 脏读不重复读幻读的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 四种事务隔离级的说明

MySQL 四种事务隔离级的说明[转]

MySQL InnoDB四个事务级别 与 脏读不反复读幻读

MySQL的ACID

Mysql InnoDB的四个事务隔离级别和(分别逐级解决的问题)脏读,不可重复读,虚读

MySQL 储存引擎 MyISAM 和 InnoDB 配置