前言
START TRANSACTION命令开启的事务在执行期间可能会受到其他并发事务的影响,而START TRANSACTION WITH CONSISTENT SNAPSHOT命令则通过创建一致性快照,在事务执行期间保持数据的一致性,避免了并发问题的影响。因此,如果需要读取一致的数据视图,可以选择使用START TRANSACTION WITH CONSISTENT SNAPSHOT命令开启事务,这也说明了mysqldump备份数据时,会开启START TRANSACTION WITH CONSISTENT SNAPSHOT的原因。
测试用例
表结构如下:
代码语言:javascript复制CREATE TABLE `t1` (
`id` int NOT NULL,
`name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
默认均是RR隔离级别。
实验1(start transaction或者叫begin)
实验2(start transaction with consistent snapshot)
结论:
START TRANSACTION是在第一条select执行完后,才得到事务的一致性快照。而START TRANSACTION with consistent snapshot则是立即得到事务的一致性快照。