前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql修改自增起始值

mysql修改自增起始值

原创
作者头像
陈平安
修改2020-04-24 12:02:22
3.3K0
修改2020-04-24 12:02:22
举报
文章被收录于专栏:trick时间trick时间

背景:

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
复制

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档