MySql的中的MVCC解决事务隔离性
MySQL中的MVCC (Multi-Version Concurrency Control) 是一种并发控制机制,用于提供读已提交(READ COMMITTED)和可重复读(REPEATABLE READ)的事务隔离级别,以解决脏读、不可重复读和幻读等问题。
MVCC 通过保存数据在某个时间点的版本来实现,具体实现方式取决于存储引擎,但大多数存储引擎,如InnoDB,通过为每行数据维护一个版本号来实现。版本号与事务ID关联,当事务开始时,InnoDB会为其分配一个唯一的事务ID。
在MVCC中,每个事务看到的数据是一个一致性的视图,即使其他事务在该事务执行期间修改了数据,也不会影响该事务的视图。
以下是MVCC在InnoDB中的一些实现方式:
- 为每行添加两个隐藏的列,用于记录行的创建版本号和删除版本号。
- 当查询数据时,只查找创建版本号小于等于当前事务版本号的行,并且删除版本号大于当前事务版本号的行。
- 当插入数据时,记录当前事务版本号作为创建版本号。
- 当删除数据时,不真正删除数据,而是记录当前事务版本号作为删除版本号。
- 当更新数据时,不是更新原数据,而是插入一个新版本的数据,并记录当前事务版本号作为创建版本号,同时保留旧数据的删除版本号为当前事务版本号。
由于MVCC的实现方式,使得InnoDB可以在并发事务中高效地执行读操作,而写操作通常需要获得表级别的锁定,以保持数据的一致性。
评论已关闭