我甩使用mysqldump用下面的命令MySQL數據庫:MySQL的負荷:在第13行錯誤1452(23000):不能添加或更新子行,外鍵約束失敗
mysqldump --no-create-db --no-create-info --compact --single-transaction --complete-insert --extended-insert=FALSE --flush-logs -uroot -ppassword databasename > databasename.db.data.dump.sql
的我之所以用上面的特定選項是,我需要:
- 只轉儲數據
- 不會產生任何DDL語句喜歡CREATE TABLE等
我有一個腳本,生成一個清潔數據庫(即一個帶有數據結構的數據庫 - 表,索引等,但沒有數據)。
我想將使用上面的命令轉儲的數據導入CLEAN數據庫。
我試圖通過鍵入以下命令來導入轉儲的數據(即還原數據)到乾淨的數據庫:
mysql -h hostname -u user --password=password databasename < filename
當我運行此命令,我收到以下錯誤:
ERROR 1452 (23000) at line 13: Cannot add or update a child row: a foreign key constraint fails (`tpwsdb`.`sf_guard_group_permission`, CONSTRAINT `sf_guard_group_permission_FK_2` FOREIGN KEY (`permission_id`) REFERENCES `sf_guard_permission` (`id`) ON DELETE CASCADE)
在轉儲的數據文件,13號線是:
INSERT INTO `sf_guard_group_permission` (`group_id`, `permission_id`) VALUES (1,1);
的架構sf_guard_group_p排除是:
mysql> describe sf_guard_group_permission;
+---------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------+------+-----+---------+-------+
| group_id | int(11) | NO | PRI | NULL | |
| permission_id | int(11) | NO | PRI | NULL | |
+---------------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Permission_id是FK到表sf_guard_permission。從錯誤中,似乎mysql正在嘗試填充依賴關係的表(可以這麼說的子表),然後填充父表。
在檢查轉儲的文件內容後,我可以看到,確實,依賴(子)表的INSERT語句PRECEDE對於父表而言 - 這顯然違反了表上的參照完整性約束。
然後,這個錯誤似乎是由其中通過mysqldump的,這奇怪的是,似乎漫不經心的RI
創建的INSERT語句的順序引起反正是有,我可以強制順序的mysqldump創建INSERT語句 - 即使其他表中的FK表出現在引用它們的表之前?
我會手動更改INSERT語句出現的順序,但該文件包含幾乎10K行,我不喜歡這樣做的前景。
有人在使用mysqldump之前一定遇到過這個問題 - 解決這個問題的方法是什麼?
是的,幾乎我所得出的結論。謝謝 .. – oompahloompah 2011-04-01 15:39:07