欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql的锁和自增主键

程序员文章站 2022-04-21 10:22:20
...
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,再迁移这条新数据的时候就会发生主键冲突。