我在mysql表中有一个名为'id'的列,它也是一个自动递增的主键。
当我删除行时,他们的id也将被删除,从而在我的id序列中创建“洞”,例如。
1,2,3,9,10,30等
有没有办法重用这些已删除的ID:s?
我在mysql表中有一个名为'id'的列,它也是一个自动递增的主键。
当我删除行时,他们的id也将被删除,从而在我的id序列中创建“洞”,例如。
1,2,3,9,10,30等
有没有办法重用这些已删除的ID:s?
使用:
ALTER TABLE [your table name here] AUTO_INCREMENT = 1
...将基于表中现有的最高值将auto_increment值重置为下一个值。这意味着它不能用于纠正不止一个的差距。
这样做的唯一原因是化妆品 - 数据库并不关心记录是否是连续的,只是它们一致地相互关联。没有必要为数据库“纠正”值。
如果你正在显示 id
对用户的价值,这就是为什么你希望它们始终是顺序的,那么我建议你添加一个代理键。使用代理键向用户显示,因此可以根据需要重新排序值,但参考完整性不受影响。在这种情况下,代理键是整数列。
使用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
你有两个选择:
TRUNCATE
表 - 这将删除表中的所有记录重复使用删除行创建的“漏洞”总是一个坏主意,这已经在此之前得到了回答,但我现在太困了,无法找到那个问题。
您可以尝试'ALTER TABLE t2 AUTO_INCREMENT = 1;'