之前在使用 Mybatis plus 的时候使用了主键生成策略 IdType.ASSIGN_ID ,
新增行的主键值都特别大,然后就改成了数据库的自增策略,
但是新增行的 id 还是特别大,一看原来是 AUTO_INCREMENT 的值变成了 1933814216852774914 ,
然后听了 gpt 的使用 ALTER TABLE 表名 AUTO_INCREMENT = 1
命令去修改其值,
但是改完了一看 AUTO_INCREMENT 还是特别大,也没找到什么说明文档🥹
故来求教各位 v 友
![]() |
1
cowcomic 12 小时 21 分钟前
官方文档
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 没有这个限制,但是有可能引起主键重复 |
![]() |
2
WilliamColton OP @cowcomic #1 明白了,谢谢!请问如果需要强行改变是不是只能删表重建了
|
![]() |
3
kk2syc 11 小时 44 分钟前
@WilliamColton 这个值是自增的最新值,不是什么增加量。
比如你本来表里有 9999 条数据,自增 id=9999 ,这时候自增值可以是 10000 、10099 等等。 但是,你不能改低于 9999 的值,哪怕你把 1-9998 删掉了,你的 min 值就是 9999 。 当然,你把 9999 这条记录也删了,就可以随便设置了。 |
![]() |
4
RangerWolf 3 小时 14 分钟前
这个 id 大就大呗 会有什么关系?
|
![]() |
5
WilliamColton OP @kk2syc #3 我已经尝试过把表数据清空了,依旧无法修改
|
6
XiLemon 2 小时 59 分钟前 via iPhone
truncate ?
|
7
yc8332 2 小时 54 分钟前
数据要清掉,truncate tablename , 然后就是从 1 开始了。除非你建表的时候就是错的。
|
![]() |
8
wowo243 2 小时 48 分钟前
试了下本地的 mysql8 复现了,然后上网搜了一下,执行个 sql 就行了。
https://blog.csdn.net/hurtheart517/article/details/130883650 |
9
Richared 1 小时 40 分钟前
mysql 自增是看表里最大值吧,跟这个字段没啥关系。现在有 1000 了,1-999 没有他也不会用,要不不乱了么。
|
![]() |
10
2Nfree 1 小时 1 分钟前
@WilliamColton #5 清空表是不会重置主键自增值的,只有重建表可以
|
11
blessingcr 1 小时 1 分钟前
之前也遇过,只要一次 id 很大,以后永远很大,除非 truncate ,起码 5.8 是这样
|