疯狂的bug 2017-12-15 14:11 采纳率: 0%
浏览 1977
已结题

MySQL Next-Key Locking 锁定的是哪个范围

问题:

1.Next-Key在通过非唯一索引键查询时,通过等值查询。锁定上下区间的范围。即针对索引10、20、30,若是锁定20,那么Next-key算法会锁定(10,20),(20,30)还是[10,20),[20,30)或者(10,20],(20,30]。

实测是[10,20),[20,30),但是和书中提到的(10,20),(20,30)不符,和官网的概念也不一致

Suppose that an index contains the values 10, 11, 13, and 20. The possible next-key locks for this index cover the following intervals, where a round bracket denotes exclusion of the interval endpoint and a square bracket denotes inclusion of the endpoint:

(negative infinity, 10]

(10, 11]

(11, 13]

(13, 20]

(20, positive infinity)

2.Next-key是为了解决幻读问题。但是在通过等值非索引查询的时候,用Record Lock就行了,为啥还要用Gap Lock。
即如下:

 只要锁住60这个索引,那么再次查询就不会出现幻读,为何需要范围锁定
 select * from user where age =60 FOR UPDATE;
  • 写回答

3条回答 默认 最新

  • oyljerry 2017-12-15 15:31
    关注

    next key是record和gap加起来,所以会有闭区间。
    因为age不是主键,它可以重复。需要age的间隙锁住主键对应的范围。

    评论

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站