0

我不知道用谷歌搜索什么来找到我想要的东西——我有一个从许多其他人那里导入的大型数据库,并且它的主键存在巨大差距。

数据库是 InnoDB,并且所有外键都设置正确(嗯......我希望,无论如何)。

有没有人知道一个脚本可以获取主键并将它们最小化,填补所有空白并更新 FK 条目?

(例如 PK 44、77、88 变为 1、2、3)

谢谢!

4

1 回答 1

0

我最终使用了类似的东西——Jonas T“插入一个新的 auto_increment 列并将其设置为主键。将一个新的外键列插入到子表中,并用它们的旧键值更新新的主键。”

在外键定义中,您有 ON DELETE,ON UPDATE。如果将 ON UPDATE 设置为 CASCADE(“ON UPDATE CASCADE”),主键上的 UPDATE 将“级联”到外键上的 UPDATE。

我的键都是 UNSIGNED int(11),你必须使用你的,我使用 x 以便只需要更改表名才能在每个表上运行

简历是一张工作表,组织是我正在“最小化”的表

DROP TABLE cv;
CREATE TABLE cv (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  cv int(11) UNSIGNED NOT NULL, 
  PRIMARY KEY(id)
);

INSERT INTO cv (cv)
  SELECT id FROM Organisation ORDER BY id;

UPDATE Organisation x
  LEFT JOIN cv ON cv.cv = x.id
  SET x.id = cv.id;
于 2012-07-18T03:27:04.767 回答