我有一个带有自动递增 id 字段的 MySQL 表。当我删除一行然后插入一个新行时,我删除的行的 id 被跳过,新的 id 比前一行大 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,则可以改为在事务中执行此操作...
不过,最好保留它。
关于mysql - 防止 MySQL id 字段中的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1956725/