2011-02-28 90 views
1

我最近將我的數據庫遷移到了不同​​的服務器上。幫我保存我的數據庫

在舊的服務器上,我大量使用了InnoDB的ON DELETE CASCADE規則。

在新服務器上,MySql沒有InnoDB引擎設置。

在遷移時,新服務器被拒絕使用MyISAM - 直到現在我才注意到這一點。 (將磁頭撞在牆上!)

因此,情況如下:因爲數據庫已被使用,所以使用ON DELETE CASCADE規則的一些表現在不同步。 (仍然敲牆頭)

這意味着我不能只是將表更改爲InnoDB並重新應用級聯規則 - 現在一些鍵引用不再存在的行。

我的問題是這樣的:

是否有配置的INSERT語句的方式,這樣,如果任何正在插入的行違反級聯規則,它只是靜靜地忽略該行並移動到下一個? (起初我以爲INSERT IGNORE會做到這一點,但我已經嘗試過了,它似乎並沒有工作。)

在此先感謝您的幫助

+0

使用「SET FOREIGN_KEY_CHECKS = 0」,並嘗試移動表InnoDB的。我沒有試過,但看看它是否有效。在做任何事之前先做好備份 – Zimbabao 2011-02-28 13:08:43

回答

0

STEP 1

製作備份

STEP 2

SET foreign_key_checks = 0; 

Migrate your data 

SET foreign_key_checks = 1; 

STEP 3

DELETE FROM table WHERE id NOT IN (SELECT foreign_key_id FROM table2); 

凡delete語句符合您ON DELETE CASCADE規則。
記住刪除操作的順序是非常重要的,所以如果需要的話,可以計劃並進行額外的備份。

一旦你完成備份一次,因此該行SET foreign_key_checks = x目前編輯備份SQL語句。 如果你的備份與外鍵檢查啓用工程,你又回來了。

我敢肯定,你可以找出更有效的刪除查詢沒有IN,只是我的2美分

相關問題