事务隔离:为什么你改了我还看不见?

事务到底是隔离的还是不隔离的?

MySQL MVCC及实现原理

事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。

事务满足ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)

隔离级别

为什么要有隔离级别?

当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。

隔离得越严实,效率就会越低。因此很多时候,我们都要在二者之间寻找一个平衡点。

SQL 标准的事务隔离级别包括(隔离级别不断提高,性能不断下降):

事务隔离的实现原理

可重复读的实现原理是MVCC

InnoDB根据MVCC原理来实现可重复读。