自学内容网 自学内容网

【mysql的当前读和快照读】

在MySQL中,尤其是InnoDB存储引擎中,读操作主要分为两种:当前读(Current Read)快照读(Snapshot Read)

  • 当前读
    当前读每次读取的都是当前最新的数据。这种读操作在读取数据时不允许其他事务对这些数据进行写操作,反之亦然,写操作时也不允许读操作。通常用于修改数据或加锁读取的操作,如UPDATE、INSERT、DELETE等。
select * from table where ... LOCK IN SHARE MODE;
select * from table where ... FOR UPDATE;
insert into tavble ...;
delete from table where ...;
update table ...;
  • 快照读
    快照读每次读取的是某个时间点的快照数据。一条数据正在被另一个事务修改,快照读也可以进行,保证读写不冲突。常用于查询数据的操作,如SELECT等。
select * from table where ...

mysql只有REPEATABLE READ(可重复读)和READ COMMITTED(读已提交)隔离级别才会使用快照度

不同的隔离级别下,快照读的行为也有所不同。

  • 在REPEATABLE READ(可重复读)隔离级别下(MySQL默认隔离级别),一个事务内多次快照读同一条记录,会得到第一次查询时的快照数据, 当然中间不能发生当前读, 否则会刷新快照。
  • 在READ COMMITTED(读已提交)隔离级别下,一个事务内多次快照读同一条记录,会得到最新提交的快照数据。

原文地址:https://blog.csdn.net/weixin_44541808/article/details/143777641

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!