简述MySQL InnoDB的3种行锁定方式 ?
参考答案:
MySQL的InnoDB存储引擎支持三种行锁定方式,分别是:
- Record Lock(记录锁):这是最基本的行锁定方式,它直接加在索引记录上,而不是行数据上。它锁住的是索引键(key),而不是具体的行数据。如果一个表没有设置主键或者唯一索引,那么InnoDB会使用隐藏的聚簇索引来进行锁定。
- Gap Lock(间隙锁):间隙锁锁定的是索引记录之间的间隙,确保索引记录的间隙不变。间隙锁是针对事务隔离级别为可重复读或以上级别的。如果一个事务正在访问一个范围,那么其他事务就不能在这个范围内插入新的记录,这样可以防止幻读的发生。
- Next-Key Lock(临键锁):这是行锁和间隙锁的组合。当InnoDB扫描索引记录的时候,会首先对索引记录加上行锁(Record Lock),再对索引记录两边的间隙加上间隙锁(Gap Lock)。这样,其他事务就不能在这个范围内修改或者插入记录。InnoDB的默认使用Next-Key Lock,这是因为它可以更有效地防止幻读的发生。
总的来说,InnoDB的这三种行锁定方式可以确保数据的一致性和完整性,防止多个事务同时修改同一份数据导致的冲突。