开发者社区> 问答> 正文

mysql中mvcc需要加锁吗

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

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

展开
收起
zhywwk 2017-02-22 18:53:05 4670 0
3 条回答
写回答
取消 提交回答
  • 我也有这个疑问,你解决了么?

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

    2019-07-17 20:49:48
    赞同 展开评论 打赏
  • 字符串更新是非原子操作,你可以使用事物处理这个逻辑

    2019-07-17 20:49:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像