V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
WilliamColton
V2EX  ›  MySQL

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

  •  
  •   WilliamColton · 12 小时 49 分钟前 · 918 次点击

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

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

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

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

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

    故来求教各位 v 友

    11 条回复    2025-06-16 11:28:40 +08:00
    cowcomic
        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 没有这个限制,但是有可能引起主键重复
    WilliamColton
        2
    WilliamColton  
    OP
       12 小时 13 分钟前
    @cowcomic #1 明白了,谢谢!请问如果需要强行改变是不是只能删表重建了
    kk2syc
        3
    kk2syc  
       11 小时 44 分钟前
    @WilliamColton 这个值是自增的最新值,不是什么增加量。

    比如你本来表里有 9999 条数据,自增 id=9999 ,这时候自增值可以是 10000 、10099 等等。
    但是,你不能改低于 9999 的值,哪怕你把 1-9998 删掉了,你的 min 值就是 9999 。
    当然,你把 9999 这条记录也删了,就可以随便设置了。
    RangerWolf
        4
    RangerWolf  
       3 小时 14 分钟前
    这个 id 大就大呗 会有什么关系?
    WilliamColton
        5
    WilliamColton  
    OP
       3 小时 13 分钟前
    @kk2syc #3 我已经尝试过把表数据清空了,依旧无法修改
    XiLemon
        6
    XiLemon  
       2 小时 59 分钟前 via iPhone
    truncate ?
    yc8332
        7
    yc8332  
       2 小时 54 分钟前
    数据要清掉,truncate tablename , 然后就是从 1 开始了。除非你建表的时候就是错的。
    wowo243
        8
    wowo243  
       2 小时 48 分钟前
    试了下本地的 mysql8 复现了,然后上网搜了一下,执行个 sql 就行了。
    https://blog.csdn.net/hurtheart517/article/details/130883650
    Richared
        9
    Richared  
       1 小时 40 分钟前
    mysql 自增是看表里最大值吧,跟这个字段没啥关系。现在有 1000 了,1-999 没有他也不会用,要不不乱了么。
    2Nfree
        10
    2Nfree  
       1 小时 1 分钟前
    @WilliamColton #5 清空表是不会重置主键自增值的,只有重建表可以
    blessingcr
        11
    blessingcr  
       1 小时 1 分钟前
    之前也遇过,只要一次 id 很大,以后永远很大,除非 truncate ,起码 5.8 是这样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3410 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 04:30 · PVG 12:30 · LAX 21:30 · JFK 00:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.