【发布时间】:2015-06-06 04:18:47
【问题描述】:
我是 MySQL 和一般数据库的新手。我的任务是手动将旧数据库移动到格式略有不同的新数据库。挑战包括将某些列从一个数据库中的表传输到另一个类似格式的数据库。这更加困难,因为源数据库是 MyISAM,目标是 InnoDB。
所以我有两个数据库,A 是源数据库,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,因此无法复制,这就是错误的样子最常产生于。
如果这有助于回答,我可以发布有问题的表格,但我不确定最好的方法,所以一些指向正确方向的方法也会有所帮助。
我之前看过的帖子:
谢谢!
【问题讨论】:
标签: mysql foreign-keys database-schema