You are currently viewing mysql的快照读与当前读

mysql的快照读与当前读

  • Post author:
  • Post category:MySQL

mysql的默认隔离级别是RR,RR的快照读在某些业务场景下可能引发一些问题。

举个例子,user表存在数据如下:

idname
1abc
表数据

RR隔离级别下,两个会话分别执行如下语句:

Session 1Session 2
Time 1begin;
select name from user where id=1;
Time 2begin;
update user set name=’b’ where id=1;
commit;
Time 3select name from user where id=1;
commit;
Time 4select name from user where id=1;
sql

Session 1的三次查询结果分别为abc、abc、b

第二次查询的结果并不是最新值,而是第一次查询时创建的快照

如果要在第二次查询时获取最新值,需要将事务级别改为RC,或者在语句后加上for share/for update

参考官方文档:

https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html

Max

Run Forrest,run!