-1

我有一个包含多个表的数据库。一张表称为“用户”。数据的一个例子是

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设置为“级联”

4

3 回答 3

0

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

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

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

于 2012-11-21T15:45:29.800 回答
0

如果你真的想要,你可以:

  1. 写一个删除记录的触发器
  2. 更新所有大于 -1 被删除的 id
  3. 然后更新所有引用该表的表。

根据您使用的数据库,您可能需要在事务开始时删除外键约束并在结束时重新启用它们。


但是您可能在这里解决了错误的问题。这似乎是一个糟糕的主意,源于肛门而不是任何真正的需要。

于 2012-11-21T15:55:58.793 回答
0

不要改变你的身份。这就像每次有人离开银行时银行都会更改您的帐号。这里有太多的风险可以让事情出错。

您尝试做的另一种方法是拥有一个 sort_order 列并自行修复。每次删除时,都会使用基于 UserID ASC 的 MS SQL 函数 RANK 函数的 mysql 版本触发更新列。

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

问候,

马库斯

于 2012-11-21T17:19:06.843 回答