背景:
A表带自增键,B表不带,通过程序从A表同步数据到B表,同步完成后会通过delete删除A表数据,今天插入B表会出现duplicate primary key问题。
A:
select max(id) from A;
auto_increment id=58000;
B:
只有主键没有自增键
select id from B by id desc limit 10;
| id |
+---------+
| 1873741 |
| 1873739 |
| 1873737 |
| 1873735 |
| 1873733 |
| 1873731 |
| 1873729 |
发现B最大id是187000w,所以考虑修改A的自增列起始值,通过如下命令
alter table A auto_increment=2000000;
修改后起始值从200w开始。
接下来继续测试,DELETE,TRUNCATE 触发AUTO_INCREMENT的变化
**结论** :
delete 操作不会变更 AUTO\_INCREMENT当前的顺序值
truncate 操作会导致AUTO\_INCREMENT 从1开始,
**主因**:
后来发现主要原因是所在实例重启造成的,auto_increment的自增值在mysql8.0之前一直是记录内存中的,
当实例重启的时候该值会丢失,那么mysql会取select max(id) + 1 的值作为新插入数据的自增ID,
这样启动后就A表从58000开始而不是1873741开始,这样造成插入B表会重复
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。