删除记录后如何确保ID保持连续?

时间:2012-11-21 15:36:57

标签: mysql sql database

我有一个包含多个表的数据库。一个表叫做#34;用户"。数据的一个例子是

0 John Black
1 Joe Bloggs
2 Jane Doe

如果我在行where id = 1上执行删除,则数据变为:

0 John Black
2 Jane Doe

我将编写什么SQL来更改进一步的记录以减少ID,以便数据变为:

0 John Black
1 Jane Doe

注意:还有其他表格包含相关数据,例如员工详细信息可能通过ID列链接了地址和电话号码,但我认为这也会改变,因为ON UPDATE是设置为"级联"

3 个答案:

答案 0 :(得分:0)

通常,出于完整性原因,我们永远不会更改数据库中的ID,并且数据库中存在间隙也没有问题。这很正常!

您不应该根据行号找到记录。如果由于存在差距而遇到问题,则需要在应用程序中重新考虑您的设计。

但如果是出于显示原因,我建议使用Row_Number

答案 1 :(得分:0)

如果真的想要你可以:

  1. 在删除记录时写下trigger
  2. 更新所有大于被删除的ID的ID
  3. 然后更新引用此表的所有表。
  4. 根据您使用的数据库,您可能需要在事务开始时删除外键约束并在结束时重新启用它们。


    但是你可能在这里解决了错误的问题。这似乎是一个不好的主意,而不是任何真正的需要。

答案 2 :(得分:0)

不要改变你的身份。这就像银行每次有人离开银行时更改您的帐号一样。对于出问题,这里有太多的空间。

您尝试执行的操作的替代方法是使用sort_order列并自行修复。每次有删除都有一个触发器使用基于UserID ASC的MS SQL函数RANK函数的mysql版本更新列。

这将为您提供相同的理想输出,但不会破坏任何表格链接。

此致

马库斯