订阅号栏目里做微网站,建设工程公司名称,浙江建设局网站首页,表白代码事务隔离级别 未提交读(Read uncommitted)是最低的隔离级别。通过名字我们就可以知道#xff0c;在这种事务隔离级别下#xff0c;一个事务可以读到另外一个事务未提交的数据。这种隔离级别下会存在幻读、不可重复读和脏读的问题。提交读(Read committed)也可以翻译成读已提交…
事务隔离级别 未提交读(Read uncommitted)是最低的隔离级别。通过名字我们就可以知道在这种事务隔离级别下一个事务可以读到另外一个事务未提交的数据。这种隔离级别下会存在幻读、不可重复读和脏读的问题。提交读(Read committed)也可以翻译成读已提交通过名字也可以分析出在一个事务修改数据过程中如果事务还没提交其他事务不能读该数据。所以这种隔离级别是可以避免脏读的发生的。可重复读(Repeatable reads)由于提交读隔离级别会产生不可重复读的读现象。所以比提交读更高一个级别的隔离级别就可以解决不可重复读的问题。这种隔离级别就叫可重复读。但是这种隔离级别没办法彻底解决幻读。可串行化(Serializable)是最高的隔离级别前面提到的所有的隔离级别都无法解决的幻读在可串行化的隔离级别中可以解决。 InnoDB如何解决脏读、不可重复读和幻读的
在Innodb中通过MVCC解决脏读和不可重复读通过MVCC间隙锁解决幻读的。 脏读的解决。脏读指一个事务可以读取另一个事务未提交的数据导致数据不一致。在读已提交Read Committed隔离级别下事务只能读取到其他事务已经提交的数据版本。因此如果一个事务在读取数据时另一个事务已经修改了这些数据但尚未提交那么读取事务将不会看到这些未提交的更改。 当事务在“读已提交”隔离级别下执行读取操作时InnoDB获取当前最新的全局事务ID这个ID表示在当前时刻所有已提交事务的最新状态。InnoDB会检查每个数据行的版本如果该版本是由一个小于或等于当前事务ID的事务修改的并且该事务已提交则这个版本是可见的。这保证了事务只能看到在它开始之前已经提交的数据版本。 不可重读的解决。不可重复读指一个事务读取同一行数据两次但是在两次读取之间另一个事务修改了该行数据导致两次读取的结果不同。InnoDB 通过使用 MVCC 来解决不可重复读的问题。在RR这种隔离级别下当我们使用快照读进行数据读取的时候只会在第一次读取的时候生成一个Read View后续的所有快照读都是用的同一个快照所以就不会发生不可重复读的问题了。 幻读的解决。InnoDB的RR级别中基于MVCC间隙锁是在某种程度上是可以避免幻读的发生的但是没有办法完全避免当一个事务中发生当前读的时候会导致幻读的发生。