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,再迁移这条新数据的时候就会发生主键冲突。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容