mysql - 防止 MySQL id 字段中的间隙

标签 mysql

我有一个带有自动递增 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/

相关文章:

javascript - 如何将 $scope.table = [] 插入 MySQL 数据库?

MySQL关系

php - SQL 数据库时间戳

PHPWord 用mysql 表数据填充.docx 模板

php - 如何根据从数据库填充的下拉框中的值获取文本字段中的数据?

mysql - 从 mysqldump 导入单个记录

mysql - PDO异常 : SQLSTATE[42000]: Syntax error or access violation Mysql

php - 根据层次结构显示数据 [祖父 -> 父 -> 子]

php - groupBy 无法在 laravel 中的 eloquent 和查询构建器中正常工作

python - 使用 python MySQLdb 解析 MySQL 数据库以提取主题标签