mysql中mvcc需要加锁吗-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

mysql中mvcc需要加锁吗

zhywwk 2017-02-22 18:53:05 3357

前提条件:
1、innodb引擎;
2、隔离级别为RR级别;
3、聚簇索引;
问题:
执行一条: update teacher set name=‘张三’ where id = 2; 该操作在读取阶段, 会把这条记录用X锁锁住呢还是把这条记录复制一份到内存,修改完数据之后, 再通过比较版本号进行更新?

按照我的理解, 既然已经通过对数据增加版本号实现事务, 应该就不再需要对数据加锁了吧, 但是网上很多人说需要next-key对数据锁定, 很疑惑。

云服务器登录 云服务器设置
分享到
取消 提交回答
全部回答(3)
  • 一直没睡醒
    2020-07-01 12:36:55

    我也有这个疑问,你解决了么?

    0 0
  • 五月华斩
    2019-07-17 20:49:48

    这个next-key就是RR级别下才会出现的一个锁。虽然你指定where字句里面有id=2。貌似只要锁定一行记录就行了。其实RR的事务级别就要求不出现幻读。就是要避免你在id=2和id=3之间再插入其他的id=2的记录。所以他就会锁住id=2的next key中间的gap不知道我这么说是否清楚。

    0 0
  • kurten
    2019-07-17 20:49:48

    字符串更新是非原子操作,你可以使用事物处理这个逻辑

    0 0
添加回答
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

相似问题
最新问题
推荐课程