ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-07-14 21:15:05  阅读:164  来源: 互联网

标签: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);

但它没有用.

解决方法:

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

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

create_table_option:
    . . .
    | AUTO_INC opt_equal ulonglong_num

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

但你没必要.

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

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

标签:mysql,auto-increment
来源: https://codeday.me/bug/20190714/1460522.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有