我不知道用谷歌搜索什么来找到我想要的东西——我有一个从许多其他人那里导入的大型数据库,并且它的主键存在巨大差距。
数据库是 InnoDB,并且所有外键都设置正确(嗯......我希望,无论如何)。
有没有人知道一个脚本可以获取主键并将它们最小化,填补所有空白并更新 FK 条目?
(例如 PK 44、77、88 变为 1、2、3)
谢谢!
我最终使用了类似的东西——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;