我有一個相當大的InnoDB/MySQL關係數據庫。我在任何地方都使用了外鍵約束,加上「ON UPDATE CASCADE」(和「ON DELETE CASCADE」)。在InnoDB/MySQL中使用外鍵約束和級聯
此數據庫是CRM系統的一部分,因此包含用戶,然後將帳戶附加到這些用戶。
通常,我們發現用戶表中有重複的條目,我們希望合併它們。
一種選擇是編寫遍歷數據庫的腳本,更新所有相關表中的user_id列。但是,每當數據庫結構發生變化時,這無疑會中斷。
我想探索的另一個選擇是使用CASCADE。如果我想合併某甲和某乙,我可以做這樣的事情:
UPDATE user SET id = $A.id$ WHERE id = $B.id$ limit 1
那麼這種變化應該通過所有依賴於用戶表的表中傳播。
然後,我不得不刪除重複的行之一的用戶:
DELETE FROM user WHERE id = $A.id$ LIMIT 1
不幸的是兩個問題的辦法。
首先,user.id
列是主鍵,因此是唯一的。其次(假設我已經將user.id
從PRIMARY KEY轉換爲常規INDEX),如果用戶中存在重複的ID,並且我刪除了一個,則刪除從屬表中的所有行。
有沒有辦法解決這些問題?
這很令人困惑 - 你說'user.id列是主鍵'和'用戶ID重複'。如果id是主鍵,它是唯一的,那麼如何重複? – Mark 2011-01-06 11:17:30