Mysql next-locking 间隙锁

mysql  innodb间隙锁就是不仅仅锁住所需要的行(如果锁住的这行不存在)还会锁住一个范围的行,这个范围依据锁住的这行而定。上下刚好是两个相邻索引叶节点的范围。包含下范围,不包含上范围。
eg:
t表的x列有索引,
session 1:
mysql> select x,a from t where x>200 for update;
+-------+------+
| x     | a    |
+-------+------+
|   202 | NULL |
|   202 | NULL |
|   300 | NULL |
|   300 | NULL |
|   500 | NULL |
|  3040 | NULL |
|  3040 | NULL |
| 30401 | NULL |
+-------+------+
8 rows in set (0.00 sec)

mysql> update t set a=600 where x=501;
Query OK, 1 row affected (8.55 sec)
Rows matched: 1  Changed: 1  Warnings: 0
这样就会锁住 [500,3040)  测试中501下界是500,上界是3039
此时插入x值[500,3030)范围时,会等待

session 2:
mysql> insert into t(x) values(500);
等待
mysql> insert into t(x) values(400);
Query OK, 1 row affected (0.00 sec)  400不在这个范围中间,可以插入
mysql> insert into t(x) values(600);
等待
mysql> insert into t(x) values(3040);
Query OK, 1 row affected (0.00 sec)   3040不在这个范围


间隙锁是否起作用,还有一个参数 innodb_locks_unsafe_for_binlog
起作用。
默认是关闭的,即间隙锁是起作用的,
设置为1 ,间隙锁不起作用,但是开启这个参数会对binlog的记录顺序产生一定影响,从而在复制和恢复时,就会导致数据不一致,这点需要注意。
这个参数不能动态修改,只能在参数文件中设置,然后重启mysql服务生效。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22418990/viewspace-753572/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22418990/viewspace-753572/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值