如何在删除行时更改自动增量主键值?

时间:2011-05-25 07:53:58

标签: mysql

我遇到一个问题,每当我删除一行时,与该行对应的行ID都会被删除,但我不希望这样。我想要的是如果删除任何行,那么该行之后的其他行应该移位一行(删除的行数)。

示例:

假设有一个用户表(id和名称)

id(auto incremented primary key)          name
1                                         xyz
2                                         aaa
3                                         ray
4                                         mark
5                                         allen

现在删除id=3行,表格应该是

id(auto incremented primary key)          name
1                                         xyz
2                                         aaa
3                                         mark
4                                         allen

有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:18)

不!不要这样做!

您的自动增量ID是一行的 IDENTITY 。其他表使用此ID来引用某一行。如果更新ID,则必须更新引用此行的所有其他表,不是关系数据库的所有点

此外,从来没有必要这样做:你不会快速耗尽自动增量列(如果你这样做,只需选择一个更大的数据类型)。

自动增量ID是纯技术数字,您的应用程序用户永远不应该看到或使用它。如果要向用户显示标识符,请添加另一列!

答案 1 :(得分:3)

你完全得到了错误的结局。不应更改自动编号,因为这会破坏任何其他引用表之间的链接。

根据它的声音,你想要的是一个行计数器,而不是主键。

答案 2 :(得分:0)

虽然通常不建议更改这些值,但确实存在您可能需要更改它们的情况。如果你有相应的外键关系设置在UPDATE级联,那么你可以这样做。当然,您需要100%所有FK关系都按预期定义。