用于最小化MySQL InnoDB主键的脚本

时间:2012-07-10 02:57:42

标签: mysql innodb

我无法弄清楚谷歌要找到我想要的东西 - 我有一个大型数据库,它已从许多其他人导入,并且在它的主键上有很大的差距。

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

有没有人知道一个脚本会占用主键并最小化它们,填补所有空白并更新FK条目?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我最终选择了与Jonas T相似的东西 “插入一个新的auto_increment列并将其设置为主键。将一个新的外键列插入子表,并按旧密钥值更新新的主键。”

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

我的密钥都是UNSIGNED int(11),你必须使用你的密钥,我使用x,这样只需要更改表名就可以在每个表上运行

CV是一个工作表,组织是我'最小化'的表

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;
相关问题