GAP LOCK(间隙锁)

  innodb间隙锁就是不仅仅锁住所需要的行(如果锁住的这行不存在)还会锁住一个范围的行,这个范围依据锁住的这行而定。上下刚好是两个相邻索引叶节点的范围。包含下范围,不包含上范围。

   在数据库参数中, 控制间隙锁的参数是:innodb_locks_unsafe_for_binlog, 这个参数默认值是OFF, 也就是启用间隙锁, 他是一个bool值, 当值为true时表示disable间隙锁。但是开启这个参数会对binlog的记录顺序产生一定影响,从而在复制和恢复时,就会导致数据不一致,这点需要注意。

这个参数不能动态修改,只能在参数文件中设置,然后重启mysql服务生效。
   

mysql> use teacher;

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from t3 where id<4;
Query OK, 0 rows affected (0.00 sec)

删除a小于4的行,从表中来看是没有满足a小于4的行,通过gap的属性知道,对于a<4的行,innodb都会加锁,一直加到等于4

打开另一个会话,禁止自动提交
mysql> use teacher;

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t3 values(3,'Jim',45);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

     

你可能感兴趣的:(Mysql)