mysql 可重复读 mvcc,mysql mvcc如何在可重复读取的隔离级别下更新select的结果集?什么是更新策略或机制?-我已经想明白了...

mysql的mvcc策略明白了,隔离级别是读已提交或可重复读的级别下使用的。有个疑问:

在读已提交的时候,sessionA在第一次查询的时候版本号是100,查询结果name=凯哥Java,此时sessionB更新了name为:公众号凯哥Java,但是事务没有提交。此时,sessionA查询的结果n

Mysql的mvcc策略理解隔离级别用于提交读取或可重复读取的级别。有一个问题:

阅读提交时,第一次查询sessionA的版本号是100,查询结果是name= Kaige Java。此时sessionB更新名称为:微信官方账号凯歌Java,交易未提交。此时,会话查询结果的名称值保持不变。如果sessionB提交事务后版本号变为150,那么查询的名称就是sessionA再次查询后sessionB的修改值。即name=微信官方账号凯歌Java。这时sessionA再次执行查询,发现版本号已经改变。如果您已经提交了读隔离级别,此时您将重新生成一个读视图。因此,可以查询更新后的值。可以理解,

但是,如果您处于可重复读取隔离级别,那么您的读取视图仍然是第一次选择时生成的读取视图。会话后名称保持不变再次查询。即name= kaige Java(注意:此时sessionB已经提交了事务)。那么问题来了:在可重复读取的隔离级别下,sessionA查询中的名称值什么时候变成最新的(假设sessionA从不超时,不执行安装、更新、删除等操作)。一直是查询操作)?最新的机制或策略或机会是什么时候?

-

当mysql的隔离级别可重复时,select语句什么时候查询最新数据?子情况:

1:如果select语句手工打开事务,那么查询的最新结果是sessionA的事务提交(即select手工打开事务,手工提交事务)后,执行select语句,得到最新的查询;

2:如果不是手动打开交易,再次执行选择,会找到最新的交易。

重复阅读和提交阅读的区别:

如果交易是手工打开的,请选择查询语句:

可重复读取:即使新会话提交了事务,select的结果也不会改变。手动提交后,选择查询的结果将是最新的;

已读提交状态:新的进程提交事务后,选择的结果将发生变化。即使没有提交,您仍然可以查询最新提交的结果。

选择查询语句,如果交易不是手工打开的:

重复读取和读取提交通常可以读取提交事务的结果。在这种情况下,两者没有区别。

中凯_凯哥java

问题已经解决:

变化时机:

如果select的语句开启了事务,当事务commit的时候,就会查询到最新的数据了。

如果select语句没有开启事务的话,下次查询就是最新的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值