我有一个带有自动增量id字段的MySQL表。当我删除一行然后插入一个新行时,我删除了我删除的行的id,并且new获得的id大于前一行的id。有什么办法可以阻止这个吗?我希望新行能够取代旧行。是否有一个重要原因导致我失踪?
答案 0 :(得分:1)
MySQL自动递增功能永远不会向后,除非你强制它。并且有充分的理由。如果对丢失的记录(日志,表等等)有迷路引用怎么办?
您可以使用此命令强制它:
ALTER TABLE tbl AUTO_INCREMENT = 1000;
或者,如果您需要在查询中执行此操作:
LOCK TABLES tbl WRITE;
SELECT @id := MAX(id) FROM tbl;
INSERT INTO tbl SET id=@id, ...;
UNLOCK TABLES;
如果您使用的是InnoDB,则可以在交易中执行此操作......
但最好还是留下它。
答案 1 :(得分:0)
自动增量字段的定义是每个插入的新行都保证获得唯一值。如果要保留旧值,则必须更新行而不是替换它。如果您的设计要求自动增量列值是连续的,那么您必须自己管理它。
答案 2 :(得分:0)
我很抱歉,但我不知道具体原因。
除非你TRUNCATE
表或明确指定id,否则你无法避免这种行为。