MySQL innodb下的记录锁,间隙锁,next-key锁
你需要知道的 之前我们介绍了排他锁,其实innodb下的记录锁(也叫行锁),间隙锁,next-key锁统统属于排他锁。 行锁 记录锁其实很好理解,对表中的记录加锁,叫做记录锁,简称行锁。 生活中的间隙锁 编程的思想源于生活,生活中的例子能帮助我们更好的理解一些编程中的思想。 生活中排队的场景,小明,小红,小花三个人依次站成一排,此时,如何让新来的小刚不能站在小红旁边,这时候只要将小红和她前面的小明之间的空隙封锁,将小红和她后面的小花之间的空隙封锁,那么小刚就不能站到小红的旁边。 这里的小红,小明,小花,小刚就是数据库的一条条记录。 他们之间的空隙也就是间隙,而封锁他们之间距离的锁,叫做间隙锁。 Mysql中的间隙锁 下表中(见图一),id为主键,number字段上有非唯一索引的二级索引,有什么方式可以让该表不能再插入number=5的记录? 图一 根据上面生活中的例子,我们自然而然可以想到,只要控制几个点,number=5 之前 不能插入记录,number=5现有的记录 之间 不能再插入新的记录,number=5 之后 不能插入新的记录,那么新的number=5的记录将不能被插入进来。 那么,mysql是如何控制number=5之前,之中,之后不能有新的记录插入呢(防止幻读)? 答案是用间隙锁,在RR级别下,mysql通过间隙锁可以实现锁定number=5之前的间隙,number