我一般是新的MySQL和數據庫。我的任務是手動將舊數據庫移動到一個稍有不同格式的新數據庫。挑戰包括將某個數據庫中某個表的某些列轉移到另一個具有相似格式的數據庫。由於源數據庫是MyISAM,目標是InnoDB,因此這會變得更加困難。MySQL的「不能添加或更新子行,外鍵約束失敗」
所以我有兩個數據庫,一個是源和B爲目標,並在嘗試「最」的表格複製到類似的表在目標數據庫中。
這裏是我運行命令:
INSERT INTO B.article (id, ticket_id, article_type_id,
article_sender_type_id, a_from, a_reply_to, a_to, a_cc, a_subject,
a_message_id, a_in_reply_to, a_references, a_content_type, a_body,
incoming_time, content_path, valid_id, create_time, create_by,change_time,
change_by)
SELECT id, ticket_id, article_type_id, article_sender_type_id,
a_from, a_reply_to, a_to, a_cc, a_subject, a_message_id, a_in_reply_to,
a_references, a_content_type, a_body, incoming_time, content_path,
valid_id, create_time, create_by, change_time, change_by
FROM A.article
WHERE id NOT IN (1);
錯誤:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`helpdesk`.`article`, CONSTRAINT `FK_article_ticket_id_id` FOREIGN KEY (`ticket_id`) REFERENCES `ticket` (`id`))
之所以提出命令這麼羅嗦是源有是不必要的,因此被修剪掉的幾列目的地表。 WHERE id NOT IN(1)在那裏,這樣第一行就不會被複制(它在兩個數據庫中都被初始化,如果兩個數據庫都有相同的'id'字段,MySQL會拋出一個錯誤)。如果預計'ticket_id'在行之間是唯一的,我不能告訴錯誤,如果它認爲'ticket_id'在行之間是唯一的,或者它聲稱一行沒有ticket_id,所以不能被複制,這是錯誤看起來是什麼最常被生成的。
我可以張貼有問題的表,如果這將有助於回答,但我不確定這樣做的最好辦法,所以在正確的方向指向一些會有有幫助。
帖子我看了看面前:
謝謝!
很確定就是這樣!感謝您指出了這一點。 – Michael 2015-04-02 11:57:40
感謝您關閉外鍵檢查。有些交織的條目除非我這樣做才能添加,我可能會爲整個數據庫做這件事。 – Michael 2015-04-03 20:02:05