什么是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);而事务更新数据的时候,
只能用当前读。如果当前的记录的行锁被其他事务占用的话,就需要进入锁等待。
对于可重复读,查询只承认在事务启动前就已经提交完成的数据;
在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。
对于读提交,查询只承认在语句启动前就已经提交完成的数据;
版权声明
本文仅代表作者观点,不代表博信信息网立场。