InnoDB对自增主键的实现方式有以下两种:
注意:AUTO-INC与其他锁不同,在语句执行完成后就释放,而不是在事务提交后释放。
Record Lock就是最普通的记录锁,其功能就是把一条记录上锁。
Gap Lock就是间隙锁,是指在记录之间的夹缝里上锁,使其他事务无法在一段区间内插入新记录。具体可以跳转到这里查看。Gap Lock用于在可重复读的事务隔离级别下避免出现幻读的问题。
Next-Key Lock本质就是Record Lock加上Gap Lock。
MySQL有一个死锁检测机制,当它检测到死锁时会将较小的事务进行回滚(较小的事务指插入、更新、删除记录条数较少的事务),并向客户端返回异常信息。
可以通过show engine innodb status
查看最近一次发生死锁的信息,这条语句也可以查看当前活跃的事务加锁的信息。