暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 间隙锁:通过这个测试题验证你是否理解间隙锁

735

关于间隙锁,你应该在很多资料上有看到过对它的解释,那么你是否完全掌握了间隙锁呢?这里就通过一个测试题,验证一下你是否理解间隙锁。

首先是建表语句:

    use muke;


    drop table if exists t17_1;


    CREATE TABLE `t17_1` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `a` int(11) NOT NULL,
    `b` int(11) NOT NULL,
    `c` int(11) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_a` (`a`) USING BTREE,
    KEY `idx_c` (`c`)
    ) ENGINE=InnoDB CHARSET=utf8mb4;


    insert into t17_1(id,a,b,c) values (1,1,1,1),(3,4,2,5),(5,3,4,3),(7,7,7,7);


    查询一下全表数据:

      select * from t17_1;

      然后进行下面实验:

      session1session2session3
      set session transaction_isolation='REPEATABLE-READ';/* 设置会话隔离级别为RR*/set session transaction_isolation='REPEATABLE-READ';/* 设置会话隔离级别为RR*/set session transaction_isolation='REPEATABLE-READ';/* 设置会话隔离级别为RR*/
      begin;

      use muke;

      select * from t17_1 where c=5 for update;

      ......

      1 row in set (0.00 sec)




      insert into t17_1 values (2,2,2,2);/* sql1 */insert into t17_1 values (6,6,6,6);/* sql2 */
      commit;

      那么在 session1 提交之前,sql1 和 sql2 是否能写入成功?原因是什么?欢迎在留言区参与讨论。


      如果你不知道原因,欢迎订购我的慕课网专栏《一线数据库工程师带你深入理解 MySQL》,在专栏的第 17 节中详细讲解了间隙锁。


      专栏知识图如下:



      另外,我们创建了一个 MySQL 交流社群,围绕开发、运维、DBA、架构师和其他需要用到 MySQL 的群体,群内会不定期邀请一些身边的数据库大牛解答大家的问题,也会分享一些读书笔记、面试技巧等,同时也用于大家交流 MySQL 的学习技巧

       

      入群请加下方群秘二维码,回复 MySQL,等待群秘邀你入群。


      本文分享自微信公众号 - MySQL数据库联盟,如有侵权,请联系 service001@enmotech.com 删除。
      最后修改时间:2019-12-20 11:33:16
      文章转载自MySQL数据库联盟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论

      关注
      暂无图片
      获得了4次点赞
      暂无图片
      获得了4次收藏