› 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 值

  •  1
     
  •   WilliamColton · Jun 15, 2025 · 5437 views
    This topic created in 473 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    故来求教各位 v 友

    14 replies  •  2025-06-17 14:54:42 +08:00
    cowcomic
        1
    cowcomic  
       Jun 16, 2025
    官方文档
    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
       Jun 16, 2025
    @cowcomic #1 明白了,谢谢!请问如果需要强行改变是不是只能删表重建了
    v1
        3
    v1  
       Jun 16, 2025
    @WilliamColton 这个值是自增的最新值,不是什么增加量。

    比如你本来表里有 9999 条数据,自增 id=9999 ,这时候自增值可以是 10000 、10099 等等。
    但是,你不能改低于 9999 的值,哪怕你把 1-9998 删掉了,你的 min 值就是 9999 。
    当然,你把 9999 这条记录也删了,就可以随便设置了。
    RangerWolf
        4
    RangerWolf  
       Jun 16, 2025
    这个 id 大就大呗 会有什么关系?
    WilliamColton
        5
    WilliamColton  
    OP
       Jun 16, 2025
    @kk2syc #3 我已经尝试过把表数据清空了,依旧无法修改
    XiLemon
        6
    XiLemon  
       Jun 16, 2025 via iPhone
    truncate ?
    yc8332
        7
    yc8332  
       Jun 16, 2025
    数据要清掉,truncate tablename , 然后就是从 1 开始了。除非你建表的时候就是错的。
    wowo243
        8
    wowo243  
       Jun 16, 2025   ❤️ 1
    试了下本地的 mysql8 复现了,然后上网搜了一下,执行个 sql 就行了。
    https://blog.csdn.net/hurtheart517/article/details/130883650
    Cruzz
        9
    Cruzz  
       Jun 16, 2025   ❤️ 1
    mysql 自增是看表里最大值吧,跟这个字段没啥关系。现在有 1000 了,1-999 没有他也不会用,要不不乱了么。
    2Nfree
        10
    2Nfree  
       Jun 16, 2025   ❤️ 1
    @WilliamColton #5 清空表是不会重置主键自增值的,只有重建表可以
    blessingcr
        11
    blessingcr  
       Jun 16, 2025   ❤️ 1
    之前也遇过,只要一次 id 很大,以后永远很大,除非 truncate ,起码 5.8 是这样
    kestrelBright
        12
    kestrelBright  
       Jun 17, 2025 via iPhone   ❤️ 1
    改了 auto inc 再执行一次 analyze table xxx
    WilliamColton
        13
    WilliamColton  
    OP
       Jun 17, 2025
    @blessingcr #11 呜呜呜,我 8.0 好像 truncate 也不行
    yc8332
        14
    yc8332  
       Jun 17, 2025
    @WilliamColton truncate 之后自己看下表当前的自增就知道了,不对就改下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2303 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 08:20 · PVG 16:20 · LAX 01:20 · JFK 04:20
    ♥ Do have faith in what you're doing.