【问题标题】:If I delete a row from a table in a database how to rename the primary keys如果我从数据库中的表中删除一行如何重命名主键
【发布时间】:2011-12-06 13:54:10
【问题描述】:

所以我想从表中删除一行,例如

1

2

3

4

5

7

8

如何重命名表格行的主键,使其等于

1

2

3

4

5

6

7

【问题讨论】:

  • 你没有。没有理由让您的主键保持顺序。重点是您可以删除#4,其余记录不受影响。
  • 我这样做是出于审美原因。
  • 这是最糟糕的原因。 不要这样做。这不是数据库的工作方式。
  • 另外,如果您引用已删除的行,则会收到错误,而不是完全不同的行。
  • @SidWebber 那么你不应该使用它作为主键

标签: mysql


【解决方案1】:

这个问题经常出现,但这是一个错误的问题。你不必关心id。它只是一个标识符。保持原状。

您可以使用自己喜欢的编程语言或通过 sql 以编程方式添加累进数字。

select *,@row:=@row+1 as progressive_number
from table, (select @row:=0) as t

【讨论】:

    【解决方案2】:

    您不应该重命名主键。它们的功能是在您的数据库中提供一个唯一的内部标识符。即使它有一个像 1, 10, 43, 88 这样的序列.. 没关系,因为它应该没有任何装饰意义。

    【讨论】:

      【解决方案3】:

      您可以通过主键删除该行...

      delete from my_table where id = 4
      

      然后递减所有后续键:

      update my_table set id = id - 1 where id > 4;
      

      假设所有引用主键的外键都设置为on update cascade,则内部的引用完整性将保持不变。如果您使用数字 id 来构建 URL,那么您的 URL 现在都已损坏。

      但你绝对不应该这样做。这不是数据库的工作方式。这不是美学问题,使用您的数据执行此操作是完全错误。从字面上看,这不是这样做的充分理由,而且还有很多不这样做的理由。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多