Mysql的锁和自增主键

Mysql中的常用命令
// 命令会陆续补充

// 查看锁的相关信息 通过kill tread_id的方式可以释放锁
select * from information_schema.innodb_trx  \G
select * from information_schema.innodb_locks \G
select * from information_schema.innodb_lock_waits \G
Mysql的自增主键

Mysql中维护这个自增主键的值是存放在内存中的,这一点就很关键,也就是说,断电或者机器重启之后,这个维护自增主键的值会消失,这时Mysql要如何维护表中的自增主键了呢?答案是Mysql在新插入数据的时候,会遍历这个主键列,取出最大值,然后加一执行插入操作。
这种情况实际上会出现一个问题,首先模拟一种操作情景,现有数据库A和B,A库需要将数据迁移到B库,现A库有字段id和name,其中id为自增主键,有数据(1, "ll"), (2, "yy"),(3, "cc")这三条数据,现将第三条数据迁移到数据库B中,然后突然断电,这时重启机器,B库中存在(3, "cc")数据,而A库中维护自增主键的因为断电,已经从内存中消失,再次插入数据的时候,主键需要遍历整个表,然后取最大值加一,于是新插入的数据的主键就变成了3,再迁移这条新数据的时候就会发生主键冲突。

你可能感兴趣的:(Mysql的锁和自增主键)