我无法弄清楚谷歌要找到我想要的东西 - 我有一个大型数据库,它已从许多其他人导入,并且在它的主键上有很大的差距。
数据库是InnoDB,并且所有外键都设置正确(好吧......我希望,无论如何)。
有没有人知道一个脚本会占用主键并最小化它们,填补所有空白并更新FK条目?
(例如PK 44,77,88变为1,2,3)
谢谢!
答案 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;