51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2162|回复: 5
打印 上一主题 下一主题

mysql中的锁查询数据问题

[复制链接]
  • TA的每日心情
    擦汗
    前天 09:07
  • 签到天数: 527 天

    连续签到: 4 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2020-10-12 15:42:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1测试积点
    在用命令行窗口测试mysql中锁的问题,都关闭自动提交。表中有id为6和10的数据,7,8,9是没有的。
    1,A窗口 start transaction;
    2,A窗口 select * from ppp where id >6 and id <10 for update;
    3,B窗口 start transaction;
    4,B窗口 insert into 表 values(7,7,'77');无法插入,在等待
    5,A窗口 commit; 同时B插入成功,A执行select * from表,无法看到新插入的数据
    6,B窗口 commit;执行 select * from表 查询可以看到新插入的数据
    7,A窗口执行 select * from表 无法看到新插入的数据,但是数据是插入成功的。
    为什么两个都提交,事务结束了,步骤7看不到新插入的数据?
    如果在步骤5中A窗口没有select查表,在步骤7中查询数据是可以看到新数据的,这是为什么?

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-9-30 15:02
  • 签到天数: 751 天

    连续签到: 2 天

    [LV.10]测试总司令

    2#
    发表于 2020-10-13 09:48:58 | 只看该作者
    参考下这个链接https://q.cnblogs.com/q/129246/
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 10:10
  • 签到天数: 1516 天

    连续签到: 5 天

    [LV.Master]测试大本营

    3#
    发表于 2020-10-13 10:04:08 | 只看该作者
    写成存过的方式去执行吧
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-10-22 14:23
  • 签到天数: 1007 天

    连续签到: 1 天

    [LV.10]测试总司令

    4#
    发表于 2020-10-13 11:15:08 | 只看该作者
    参考这篇博文看下呢 https://www.cnblogs.com/jssj/p/13437036.html
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 07:28
  • 签到天数: 2812 天

    连续签到: 5 天

    [LV.Master]测试大本营

    5#
    发表于 2020-10-13 13:06:01 | 只看该作者
    MySQL MVCC支持的情况默认是可重复读, 也就是说读的快照的数据, 故第二次查询还是快照的数据。 但是如果是在commit 之后没有查询, 后面新查询就会开启新的快照,这个快照里面就是有之前插入的数据。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-10-13 13:34
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    6#
    发表于 2020-10-13 13:37:15 | 只看该作者
    MySQL MVCC支持的情况默认是可重复读, 也就是说读的快照的数据, 故第二次查询还是快照的数据。 但是如果是在commit 之后没有查询, 后面新查询就会开启新的快照,这个快照里面就是有之前插入的数据。

    下面是可重复读的说明:
    REPEATABLE READ (可重复读)

    REPEATABLE READ 解决了脏读的问题。该级别保证了在同一个事务中多次读取同样记录的结果是一致的。但是理论上,可重复读隔离级别还是无法解决另外一个幻读(Phantom Read的问题。所谓幻读,指的是当某个事务在该取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row). InnoDB和XtraDB存储引擎通过多版本并发控制(MVCC Mutiversion Concurrency Control)解决了幻读的问题,重点:这里更新范围数据的时候的,如果在另外一个事务中插入了在这个范围内的记录,那么这次更新再提交的时候还是会出现未更新到的问题,故MySQL在这种情况下,还给我们加入了GAP锁(间隙锁)和next-lock锁,需要建立索引哦,保证其他事务不能在你更新的范围内插入数据。

    可重复读是MySQL的默认事务隔离级别。
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 21:35 , Processed in 0.068713 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表