如何在mysql中重用已删除的主键?

时间:2010-02-18 02:32:10

标签: php mysql

我在mysql表中有一个名为'id'的列,它也是一个自动递增的主键。

当我删除行时,他们的id也将被删除,从而在我的id序列中创建“漏洞”,例如。

1,2,3,9,10,30等

有没有办法重用这些已删除的ID:s?

4 个答案:

答案 0 :(得分:10)

使用:

ALTER TABLE [your table name here] AUTO_INCREMENT = 1

...会根据表中现有的最高值将auto_increment值重置为下一个值。这意味着它不能用于纠正不止一个的差距。

执行此操作的唯一原因是化妆品 - 数据库不关心记录是否是连续的,只是它们一致地相互关联。没有必要为数据库“纠正”值。

如果您向用户显示id值,这就是为什么您希望它们始终是顺序的,那么我建议您添加代理键。使用代理键向用户显示,因此可以根据需要重新排序值,但参考完整性不受影响。在这种情况下,代理键是一个整数列。

答案 1 :(得分:2)

使用bash脚本重命名它们(如果你有一个大型数据库,这是非常慢和低效的)然后在你完成之后,如前所述使用ALTER TABLE来重置下一个要使用的键

TARGET=1
for KEYS in `mysql --skip-column-names -u root --password=Password -D lookup -e "select id from tbl"` ; do
  mysql --skip-column-names -u root --password=Password -D lookup -e "update tbl set id='$TARGET' where id = '$KEYS'"
  TARGET=`expr $TARGET + 1`
  echo $TARGET
done

答案 2 :(得分:1)

您有两种选择:

  1. 手动指定ID(这会自动从自动增量中删除)
  2. TRUNCATE表格 - 这将删除表格中的所有记录
  3. 重复使用删除行创建的“漏洞”总是一个坏主意,这已经在此之前得到了解答,但我现在太困了,无法找到这个问题。

答案 3 :(得分:1)

您可以尝试'ALTER TABLE t2 AUTO_INCREMENT = 1;'