小编典典

自动增量不会在MySQL中重置

mysql

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

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

DELETE FROM AppointmentAttr
ALTER TABLE AppointmentAttr AUTO_INCREMENT = 1

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

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

这是在INNODB数据库上。

我想念什么?

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


阅读 260

收藏
2020-05-17

共1个答案

小编典典

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)。

2020-05-17