MySQL中未重置自动增量
我试图设置一个脚本,在数据库中生成一组特定的测试数据,开始时我希望清除相关的表,而不删除约束(因为测试数据不是重建约束的合适位置)并重置每个表的自动增量,因为如果我可以硬编码许多ID,那么设置测试数据会非常简单 例如,我有两个这样的语句(几乎每个表都有一对): 当记录被删除时,自动增量值不会恢复为1,即使我能找到的所有文档和答案都表明这应该有效 如果我在MySQL Workbench中执行相同的语句,它也不会还原它 这在INNODB数据库上 我错过了什么MySQL中未重置自动增量,mysql,Mysql,我试图设置一个脚本,在数据库中生成一组特定的测试数据,开始时我希望清除相关的表,而不删除约束(因为测试数据不是重建约束的合适位置)并重置每个表的自动增量,因为如果我可以硬编码许多ID,那么设置测试数据会非常简单 例如,我有两个这样的语句(几乎每个表都有一对): 当记录被删除时,自动增量值不会恢复为1,即使我能找到的所有文档和答案都表明这应该有效 如果我在MySQL Workbench中执行相同的语句,它也不会还原它 这在INNODB数据库上 我错过了什么 (注意:由于存在约束,我无法使用TRUN
(注意:由于存在约束,我无法使用TRUNCATE)。从alter table语句中可以看到 您可以使用ALTERTABLE语句重置自动增量值。用于重置自动增量值的ALTER TABLE语句的语法如下所示:
ALTER TABLE table_name AUTO_INCREMENT = value;
在ALTER table子句之后指定表名,并在表达式AUTO_INCREMENT=value中指定要重置的值
请注意,该值必须大于或等于自动递增列的当前最大值。
我怀疑这就是你的问题所在。因此,基本上您只剩下以下几个选项:
ALTER TABLE table_name AUTO_INCREMENT = value;
ALTER TABLE tblName MODIFY COLUMN pkKeyColumn BIGINT NOT NULL;
ALTER TABLE tblName MODIFY COLUMN pkKeyColumn BIGINT AUTONUMBER NOT NULL;
希望这些对我有所帮助。从ALTERTABLE语句中我可以看到 您可以使用ALTERTABLE语句重置自动增量值。用于重置自动增量值的ALTER TABLE语句的语法如下所示:
ALTER TABLE table_name AUTO_INCREMENT = value;
在ALTER table子句之后指定表名,并在表达式AUTO_INCREMENT=value中指定要重置的值
请注意,该值必须大于或等于自动递增列的当前最大值。
我怀疑这就是你的问题所在。因此,基本上您只剩下以下几个选项:
ALTER TABLE table_name AUTO_INCREMENT = value;
ALTER TABLE tblName MODIFY COLUMN pkKeyColumn BIGINT NOT NULL;
ALTER TABLE tblName MODIFY COLUMN pkKeyColumn BIGINT AUTONUMBER NOT NULL;
希望这些有点帮助。MySQL不允许您减少自动增量值,如下所述: 不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于当前“自动增量”列中的最大值,则该值将重置为当前“自动增量”列中的最大值加上一 即使有您的限制,我也会尝试以下方法之一:
OP中的注释:我需要的是(1)。MySQL不允许您减少自动增量值,如下所述: 不能将计数器重置为小于或等于当前使用的值。对于InnoDB和MyISAM,如果该值小于或等于当前“自动增量”列中的最大值,则该值将重置为当前“自动增量”列中的最大值加上一 即使有您的限制,我也会尝试以下方法之一:
;;assuming your column is called id and your table is tbl
ALTER TABLE tbl DROP COLUMN id;
ALTER TABLE tbl ADD COLUMN id BIGINT UNSIGNED DEFAULT 1 PRIMARY KEY FIRST;
这个应该可以运行,但我不使用MySQL,只是不使用文档。如果您需要进一步的帮助,请留下评论,我会尽全力帮助您。您能不能重新创建它?示例如下:
;;assuming your column is called id and your table is tbl
ALTER TABLE tbl DROP COLUMN id;
ALTER TABLE tbl ADD COLUMN id BIGINT UNSIGNED DEFAULT 1 PRIMARY KEY FIRST;
这个应该可以运行,但我不使用MySQL,只是不使用文档。如果您需要进一步的帮助,请留下评论,我会尽力提供帮助。当我从表中删除中间行时,遇到了这个问题。 我的答案是在不存在的ID中插入新数据。 我希望我的答案仍然有用,即使它是PHP而不是MYSQL
$rez = mysql_query("SELECT * FROM users");
$exists = 1;
while($row = mysql_fetch_array($rez)){
if ( $exists != $row{'id'} ){
echo "found not existing id: ".$exists;
INSERT INTO users VALUES($exists,.. ,..);
exit;
} $exists += 1;
}
INSERT INTO users VALUES(NULL,.. ,..); ##auto_inc column converts NULL to latest
我希望它能有所帮助。我从表中删除中间行时遇到了这个问题。 我的答案是在不存在的ID中插入新数据。 我希望我的答案仍然有用,即使它是PHP而不是MYSQL