当前位置: 首页 > 面试题库 >

自动增量不会在MySQL中重置

宇文飞翮
2023-03-14
问题内容

我正在尝试建立一个脚本以在数据库中生成一组特定的测试数据,在该脚本的开头,我想清除有关表而不删除约束(因为测试数据不是重建约束的适当位置)并为每个表重置AUTO_INCREMENT,因为如果可以硬编码许多ID,则设置测试数据要简单得多。

例如,我有两个这样的语句(几乎每个表都有一对):

DELETE FROM AppointmentAttr
ALTER TABLE AppointmentAttr AUTO_INCREMENT = 1

并且在删除记录时,即使我能找到的所有文档和SO回答都表明这应该可行,但auto-increment值也不会恢复为1。

如果我在MySQL Workbench中执行相同的语句,它也不会还原它。

这是在INNODB数据库上。

我想念什么?

(注意:由于存在约束,我无法使用TRUNCATE)。


问题答案:

MySQL不允许您减小AUTO_INCREMENT值,如下所示:http : //dev.mysql.com/doc/refman/5.6/en/alter-
table.html

您不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前的最大AUTO_INCREMENT列值加1。

即使有您的限制,我也会尝试以下方法之一:

  1. 明确插入测试数据的身份。与其他一些数据库引擎不同,MySQL对此没有任何问题
  2. 如果约束本身不存在,请删除并重新创建您的标识列(或仅将其更改为标识)。
  3. 请勿使用“身份”列,而使用其他方法(例如过程或外部代码)来控制您的身份。这真的是不得已而为之,我一般不会推荐它。

OP的注释:这就是我需要的(1)。



 类似资料:
  • 问题内容: 我正在使用php和mysql。我有一个表,其中id列设置为自动递增作为主键。我正在尝试添加另一个名为sort_order的列。插入行后,sort_order列应自动递增。然后,用户将能够更改sort_order值。但是mysql不允许多于一列的自动递增? 自动递增sort_order值的最佳方法是什么? 受欢迎的要求,更多的解释。 在管理区域中,用户将具有类别列表。用户可以使用java

  • 问题内容: 我正在尝试在mysql数据库中创建一列,该列自动递增1但从0-Z开始然后滚动。 例如000、001、002,…,009、00A,00B,…,00Z,010,…,0ZZ,…,100。 我想让数据库通过自动递增字段创建列。 我的想法是: 为从0到36的每个字符创建一列,然后将行N(其中N是最低有效数字)自动递增1。然后在每列上添加触发器,以在第N列达到36时向N-1列添加1 。 创建一个包

  • 问题内容: 我刚遇到一个我无法解决的问题。 我有一个用作队列的数据库表,我在其中存储一些记录。处理记录后,它们将被删除。删除是由Rails构建在一个触发MySql数据库的循环中调用的。 但是现在我注意到,在表中将 autoIncrement Id (主键)设置回 1 。(这损坏了我在审计表中的引用。相同记录现在指向多个不同的项目队列) 我不使用或删除表构造,而是在代码中再次创建它。 是否有人遇到像

  • 问题内容: 是否可以自动增加非主密钥? 表“ book_comments” 该表上将没有其他索引。但是,我想使列自动递增,以便可以轻松创建另一个表: 表格“ book_comments_votes” 用户将只能对每个书评进行一次投票。该表通过主键强制执行此规则。 题: 是否可以自动增加非主键-例如,自动增加表“ book_comments”中的列? 替代方案,讨论: 如上所述,我想这样做是为了简化

  • 问题内容: 我刚刚使用MySQL查询浏览器创建了一个新表,并注意到在“自动增量列”下有一个勾号。这是如何运作的? 以编程方式添加到数据库时,是否仅添加一个数字,然后数据库会自动将该数字递增? 每次有新用户在我的网站上注册时,我都希望他们的客户ID(仅整数)自动递增,因此我不必尝试随机生成一个唯一的数字。 可以简单地完成吗? 谢谢! 问题答案: 以编程方式添加到数据库时,是否仅添加一个数字,然后数据

  • 问题内容: 我有一个带有主键字段且具有AUTO_INCREMENT的MySQL表。在阅读了这里的其他文章后,我发现人们遇到了同样的问题,答案也各不相同。有些人建议不要使用此功能,其他人则说它不能被“修复”。 我有: 示例:表中的记录数:18.如果我删除记录16、17和18-我希望输入的下一条记录的courseID为16,但是由于最后输入的courseID为18,所以它将为19。 我的SQL知识不是