使用子查询mysql在同一个表中更改auto_increment

Pra*_*atz 3 mysql auto-increment

我正在使用mysql.我有一个带auto_increment计数器集的数据库表.现在因为要求我需要离开100个ID并从101开始移动所有现有记录,所以当前id 1将变为101,id 2将变为102,依此类推.

我能够将记录移动到101,但问题是如何将auto_increment计数器更改为max(id)+1.

这里的主要约束是我需要在单个sql语句中执行它.我无法使用@counter保存该值并在以后使用它.

我尝试使用以下查询

ALTER TABLE role AUTO_INCREMENT = (SELECT rd.counter FROM (SELECT (MAX(id) + 1) AS counter FROM role r) rd);
Run Code Online (Sandbox Code Playgroud)

但它没有用.

Bil*_*win 10

解析器不支持您尝试使用它的位置的子查询.

这是MySQL源代码的摘录,来自sql/sql_yacc.yy:

create_table_option:
    . . .
    | AUTO_INC opt_equal ulonglong_num
Run Code Online (Sandbox Code Playgroud)

您应该阅读的是,AUTO_INCREMENTtable选项只接受单个文字编号,而不是表达式或子查询或变量或其他任何内容.因此,您无法在与其相同的语句中设置AUTO_INCREMENT SELECT MAX(id)+1.

但你没必要.

MySQL绝不会分配小于当前表中最大值的自动增量ID .因此,如果您有一个id值为102的表,则分配的下一个值至少为 103.

您甚至可以尝试明确设置AUTO_INCREMENT = 50,但会自动增加到MAX(id)+1.