0
我不能找出什麼谷歌找到我後 - 我有一個大型數據庫已從其他許多人導入,並有主要關鍵的巨大差距。腳本最大限度地減少MySQL的InnoDB主鍵
數據庫是InnoDB,並且所有外鍵都設置正確(好吧......我希望,無論如何)。
是否有人知道腳本會佔用主鍵並最小化它們,填補所有空隙並更新FK條目?
(例如PK44,77,88變爲1,2,3)
謝謝!
我不能找出什麼谷歌找到我後 - 我有一個大型數據庫已從其他許多人導入,並有主要關鍵的巨大差距。腳本最大限度地減少MySQL的InnoDB主鍵
數據庫是InnoDB,並且所有外鍵都設置正確(好吧......我希望,無論如何)。
是否有人知道腳本會佔用主鍵並最小化它們,填補所有空隙並更新FK條目?
(例如PK44,77,88變爲1,2,3)
謝謝!
我結束了 - Jonas T 「插入一個新的auto_increment列並將其設置爲主鍵。將新的外鍵列插入到子表中並使用舊鍵值更新新主鍵。 「
在外鍵定義中,您有ON DELETE,ON UPDATE。 如果將ON UPDATE設置爲CASCADE(「ON UPDATE CASCADE」),則主鍵上的更新將「級聯」到外鍵上的UPDATE。
我的鑰匙都是無符號整型(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;
「並且在它的主鍵上有巨大的差距」---那又如何?什麼是**真正**問題? – zerkms 2012-07-10 02:58:43
插入一個新的auto_increment列並將其設置爲主鍵。將一個新的外鍵列插入到子表中,並通過舊鍵值更新新的主鍵。 – 2012-07-10 03:02:19
@ zerkms - 當數據中只有200條記錄時,我有一些ID爲100000或更多的表。誠然,這不是一個大問題,但它很煩人。 – daemonl 2012-07-10 03:08:46