2012-07-10 69 views
0

我不能找出什麼谷歌找到我後 - 我有一個大型數據庫已從其他許多人導入,並有主要關鍵的巨大差距。腳本最大限度地減少MySQL的InnoDB主鍵

數據庫是InnoDB,並且所有外鍵都設置正確(好吧......我希望,無論如何)。

是否有人知道腳本會佔用主鍵並最小化它們,填補所有空隙並更新FK條目?

(例如PK44,77,88變爲1,2,3)

謝謝!

+0

「並且在它的主鍵上有巨大的差距」---那又如何?什麼是**真正**問題? – zerkms 2012-07-10 02:58:43

+1

插入一個新的auto_increment列並將其設置爲主鍵。將一個新的外鍵列插入到子表中,並通過舊鍵值更新新的主鍵。 – 2012-07-10 03:02:19

+0

@ zerkms - 當數據中只有200條記錄時,我有一些ID爲100000或更多的表。誠然,這不是一個大問題,但它很煩人。 – daemonl 2012-07-10 03:08:46

回答

0

我結束了 - 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; 
相關問題