【发布时间】:2015-04-17 09:25:32
【问题描述】:
我有一个这样的mysql表:
PK other_id name url
1 1 jeff www.jeff.com
2 2 steve www.steve.com
3 3 jenn www.jenn.com
4 4 susan www.susan.com
5 5 melissa www.melissa.com
我需要在具有主键 3 的表中输入一个新行。这个主键已经被占用,所以我必须以某种方式拆分它,为新的 PK=3 插入新行,然后附加剩余的行现在将从 PK=4 开始。
PK other_id name url
1 1 jeff www.jeff.com
2 2 steve www.steve.com
3 3 josh www.josh.com <---- new row added with PK=3
4 4 jenn www.jenn.com
5 5 susan www.susan.com
6 6 melissa www.melissa.com
我尝试了更改表技术,但没有成功。
【问题讨论】:
-
你为什么要这么做?技术键只是唯一的数字,没有任何语义问题。
-
您为什么要这样做?这就是PK的作用,做一个稳定的参考记录。如果要将 PK 向下移动,则需要考虑数据库中引用该 PK 字段的任何其他条目。此外,通过在该表上执行任何新插入并应用您的逻辑,将在不久的将来杀死数据库服务器。
-
应用程序在流式传输时取决于表中的顺序。它以串行方式读取。
-
然后修改应用程序的 select 语句,使其按所需的顺序排序,并使用另一种方式,然后向下移动行以确定顺序。
-
我认为您有一些非常独特的要求,但通常这没有任何意义。如果您想以特定顺序查看行,则添加一个带有索引的“order”列,并在插入新行时设置它。这样您就不必更改可能用于关系的 PK,因此如果您更改它(在许多记录上),您也必须在其他表中更改它(在许多记录上)!
标签: mysql primary-key