前提条件:
1、innodb引擎;
2、隔离级别为RR级别;
3、聚簇索引;
问题:
执行一条: update teacher set name=‘张三’ where id = 2; 该操作在读取阶段, 会把这条记录用X锁锁住呢还是把这条记录复制一份到内存,修改完数据之后, 再通过比较版本号进行更新?
按照我的理解, 既然已经通过对数据增加版本号实现事务, 应该就不再需要对数据加锁了吧, 但是网上很多人说需要next-key对数据锁定, 很疑惑。
这个next-key就是RR级别下才会出现的一个锁。虽然你指定where字句里面有id=2。貌似只要锁定一行记录就行了。其实RR的事务级别就要求不出现幻读。就是要避免你在id=2和id=3之间再插入其他的id=2的记录。所以他就会锁住id=2的next key中间的gap不知道我这么说是否清楚。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。