我正在尝试设置一个脚本来生成一组特定的测试数据到我的数据库中,在开始时我想清除相关的表而不删除约束(因为测试数据不是重建约束的适当位置)并重置每个表的AUTO_INCREMENT,因为如果我可以对许多ID进行硬编码,那么设置测试数据要简单得多.
例如,我有两个这样的语句(几乎每个表都有一对):
DELETE FROM AppointmentAttr
ALTER TABLE AppointmentAttr AUTO_INCREMENT = 1
Run Code Online (Sandbox Code Playgroud)
当记录被删除时,自动增量值不会恢复为1,即使我找到的所有文档和SO答案都表明这应该有效.
如果我在MySQL Workbench中执行相同的语句,它也不会还原它.
这是在INNODB数据库上.
我错过了什么?
(注意:由于存在约束,我不能使用TRUNCATE).
Mar*_*ton 14
MySQL不允许您减少AUTO_INCREMENT值,如下所示:http: //dev.mysql.com/doc/refman/5.6/en/alter-table.html
您无法将计数器重置为小于或等于当前正在使用的值的值.对于InnoDB和MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则该值将重置为当前最大AUTO_INCREMENT列值加1.
即使有你的约束,我也会尝试下列之一:
OP的注释:这是(1)这就是我需要的.
从我所看到的alter table语句.
您可以使用ALTER TABLE语句重置自动增量值.用于重置自动增量值的ALTER TABLE语句的语法如下:
ALTER TABLE table_name AUTO_INCREMENT = value;
Run Code Online (Sandbox Code Playgroud)
您可以在ALTER TABLE子句之后指定表名,并在表达式AUTO_INCREMENT = value中指定要重置的值.
请注意,该值必须大于或等于自动增量列的当前最大值.
我怀疑你的问题在哪里.所以基本上你剩下几个选项如下:
ALTER自动编号栏:我没有试过这个,但理论上你可以将主键列从自动编号改为int,然后再将其设为自动编号.就像是:
ALTER TABLE tblName MODIFY COLUMN pkKeyColumn BIGINT NOT NULL;
ALTER TABLE tblName MODIFY COLUMN pkKeyColumn BIGINT AUTONUMBER NOT NULL;
Run Code Online (Sandbox Code Playgroud)希望这些有点帮助.
归档时间: |
|
查看次数: |
27263 次 |
最近记录: |