mysql修改自增起始值

2020-04-24 12:02:22 浏览数 (1)

背景:

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;

代码语言:txt复制
 | id      |

 --------- 

| 1873741 |

| 1873739 |

| 1873737 |

| 1873735 |

| 1873733 |

| 1873731 |

| 1873729 |

发现B最大id是187000w,所以考虑修改A的自增列起始值,通过如下命令

alter table A auto_increment=2000000;

修改后起始值从200w开始。

接下来继续测试,DELETE,TRUNCATE 触发AUTO_INCREMENT的变化

代码语言:txt复制
 **结论** :

 delete 操作不会变更 AUTO_INCREMENT当前的顺序值

 truncate 操作会导致AUTO_INCREMENT 从1开始,
 
代码语言:txt复制
**主因**:
 后来发现主要原因是所在实例重启造成的,auto_increment的自增值在mysql8.0之前一直是记录内存中的,
 当实例重启的时候该值会丢失,那么mysql会取select max(id)   1 的值作为新插入数据的自增ID,
 这样启动后就A表从58000开始而不是1873741开始,这样造成插入B表会重复
代码语言:txt复制

0 人点赞