MySQL Transaction--MySQL与SQL Server在可重复读事务隔离级别上的差异

MySQL和SQL Server两种数据库在REPEATABLE-READ事务隔离级别实现方式不同,导致使用上也存在差异。

在MySQL中,默认使用REPEATABLE-READ事务隔离级别,MySQL通过MVCC (Multiversion Concurrency Control)来实现REPEATABLE-READ事务隔离级别。

在MS SQL SERVER中,默认使用READ-COMMITED事务隔离级别,SQL Server通过LOCK来实现REPEATABLE-READ事务隔离级别。

假设在可重复事务隔离级别下有下面步骤:
1. 事务TX1开始事务
2. 事务TX1访问表TB1
3. 事务TX2修改表TB2的数据并提交
4. 事务TX1访问TB2的数据

对于MySQL,事务TX1访问TB2得到的数据是TX2修改前的数据,因为MySQL的可重复读是按照事务开始的时间点来计算的,通过事务号来访问不同版本的数据。
对于SQL SERVER,事务TX1访问TB2得到的数据是TX2修改后的数据,因为SQL SERVER的可重复读是依赖于数据第一次被读取时加锁来保证的。

 

mysqldump --singletransaction方式就是基于REPEATABLE-READ事务隔离级别来获取整个备份期间的事务表的数据一致性,且无需对事务表加锁。

 

posted @ 2019-04-02 16:02  TeyGao  阅读(181)  评论(0编辑  收藏  举报