【问题标题】:How to Reorder/Reset auto increment primary key with foreign key?如何使用外键重新排序/重置自动增量主键?
【发布时间】:2015-09-22 11:18:20
【问题描述】:

我有两张如下表。

人表带主键,地址表带主键,外键带人表主键的id。

两个表都错过了介于 1、3、6 之间的一些行...... 一些行(4 和 5)已被删除。

现在我需要重新排列两个表中的主键,并且在更改主键后,外键也需要更改为新的主键。

请帮忙。

【问题讨论】:

  • 跳过一些 id 值没有区别。没有(合理的)需要重新分配主键。它们一旦设置就不应更改。
  • 你不应该重新排列主键。最好的解决方案是,在插入新数据时,添加遗漏的数字作为主键。
  • 这是我想做的一个要求。这需要在具有外键的大型两个表中进行,因为主键列的数据类型(int)大小不够,现在我们也无法更改数据类型。数据在中间被删除,所以如果我们可以重新排列,那将是解决方案。

标签: mysql database


【解决方案1】:

不应更改记录的主键。数据一致性可能会破坏(新的主键可能是非唯一的,外键可能会破坏,等等)。

这是所有关系数据库的基本规则。

【讨论】:

  • 同意。但这是对具有外键和主键列的数据类型为 INT 的大型两张表的特殊要求。随着当前数据的增长,一段时间后 INT 类型对于主键列来说是不够的,如果我们可以重新排列列 id 将解决这个问题。
  • 我突出显示“NEVER”这个词 ;-)。如果 INTEGER 不够用,请使用 BIG_INTEGER (long) 类型。
  • 现在这是不可能的,因为它会影响整个系统。这就是我寻找替代解决方案的原因。
  • 重新排列 PK 对系统的影响更大。
  • 唯一的问题是另一个表中的外键。否则对系统无效。如果我能够解决外键问题(使用外键更改主键),那将是最好的方法。
猜你喜欢
  • 2010-10-18
相关资源
最近更新 更多