2010-07-08 86 views
0

我想將我的一個數據庫從myisam遷移到innodb。主要原因是允許我的應用程序遵守參照完整性。從myisam遷移到innodb時的參照完整性問題

這是我做過什麼

  1. 導出當前的MyISAM數據庫
  2. 丟棄數據庫
  3. 切換到InnoDB的數據庫http://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/
  4. 驗證的發動機開關,然後創建新的數據庫

現在,參照完整性起作用。例如,如果我創建父p1和子c1並在c1中引用p1,則只要存在依賴它的子項,我就不能刪除P1。

到目前爲止好

但是,當我從導出轉儲

的問題是,參照完整性很榮幸爲新的數據導入舊數據出現問題。但是在我現有的數據中,如果有任何關係像c2那樣引用p2,那麼我可以刪除p2以打破引用完整性。 c2現在是孤兒。

是否有修復/重新索引表的方法,以便對現有數據執行參照完整性?

+0

你可以從'SHOW CREATE TABLE'爲兩個受影響的相關表發佈輸出嗎? – Mike 2010-07-08 22:53:12

回答

0

感謝您的回答。這會很有用,因爲那會導致我的根本原因。問題的根本原因是我的mysqldump包含drop和create語句。由於在導出時這是引擎,所以創建語句具有ENGINE = MYISAM。

我使用--no-create-info選項創建了新的轉儲,一切正常。

0

確保你有你的所有外鍵新鮮的指標和參考鍵(表索引更新每一個刀片),然後在地方跑

ALTER TABLE you_table0 ADD FOREIGN KEY ... 

爲每個表,您的所有遺留數據已經。

應該工作)