天天看点

什么是MySQL一致性读

两阶段锁协议

在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。

手动开启事务的三种方式

begin/start transaction和 start transaction with consistent snapsh区别

begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB 表的语句,事务才真正启动。

如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。

第一种启动方式,一致性视图是在执行第一个快照读语句时创建的;

第二种启动方式,一致性视图是在执行 start transaction with consistent snapshot 时创建的。

可重复读

在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图;

对于可重复读

更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”(current read)。

可重复读的核心就是一致性读(consistent read);而事务更新数据的时候,

只能用当前读。如果当前的记录的行锁被其他事务占用的话,就需要进入锁等待。

对于可重复读,查询只承认在事务启动前就已经提交完成的数据;

读提交

继续阅读