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