Mysql 无法修改自增主键的 AUTO_INCREMENT 值

48 天前
 WilliamColton

之前在使用 Mybatis plus 的时候使用了主键生成策略 IdType.ASSIGN_ID ,

新增行的主键值都特别大,然后就改成了数据库的自增策略,

但是新增行的 id 还是特别大,一看原来是 AUTO_INCREMENT 的值变成了 1933814216852774914 ,

然后听了 gpt 的使用 ALTER TABLE 表名 AUTO_INCREMENT = 1 命令去修改其值,

但是改完了一看 AUTO_INCREMENT 还是特别大,也没找到什么说明文档🥹

故来求教各位 v 友

2192 次点击
所在节点    MySQL
14 条回复
cowcomic
48 天前
官方文档
https://dev.mysql.com/doc/refman/8.4/en/innodb-auto-increment-handling.html

ALTER TABLE ... AUTO_INCREMENT = N can only change the auto-increment counter value to a value larger than the current maximum.
ALTER TABLE ... AUTO_INCREMENT = N 只能将自动增量计数器的值更改为大于当前最大值的值。

mysql 5 没有这个限制,但是有可能引起主键重复
WilliamColton
48 天前
@cowcomic #1 明白了,谢谢!请问如果需要强行改变是不是只能删表重建了
kk2syc
48 天前
@WilliamColton 这个值是自增的最新值,不是什么增加量。

比如你本来表里有 9999 条数据,自增 id=9999 ,这时候自增值可以是 10000 、10099 等等。
但是,你不能改低于 9999 的值,哪怕你把 1-9998 删掉了,你的 min 值就是 9999 。
当然,你把 9999 这条记录也删了,就可以随便设置了。
RangerWolf
48 天前
这个 id 大就大呗 会有什么关系?
WilliamColton
48 天前
@kk2syc #3 我已经尝试过把表数据清空了,依旧无法修改
XiLemon
48 天前
truncate ?
yc8332
48 天前
数据要清掉,truncate tablename , 然后就是从 1 开始了。除非你建表的时候就是错的。
wowo243
48 天前
试了下本地的 mysql8 复现了,然后上网搜了一下,执行个 sql 就行了。
https://blog.csdn.net/hurtheart517/article/details/130883650
Richared
48 天前
mysql 自增是看表里最大值吧,跟这个字段没啥关系。现在有 1000 了,1-999 没有他也不会用,要不不乱了么。
2Nfree
48 天前
@WilliamColton #5 清空表是不会重置主键自增值的,只有重建表可以
blessingcr
48 天前
之前也遇过,只要一次 id 很大,以后永远很大,除非 truncate ,起码 5.8 是这样
kestrelBright
47 天前
改了 auto inc 再执行一次 analyze table xxx
WilliamColton
47 天前
@blessingcr #11 呜呜呜,我 8.0 好像 truncate 也不行
yc8332
47 天前
@WilliamColton truncate 之后自己看下表当前的自增就知道了,不对就改下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1138738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX