2013-02-10 67 views
0

我有一个建立的数据库,所有表设置使用INNODB外键。现在我需要修改一个表并添加一个引用另一个表的新列。我的查询是:MySQL将外键添加到现有表PHP

ALTER TABLE test ADD newcol INT NOT NULL; 

ALTER TABLE test ADD CONSTRAINT fk_test 
FOREIGN KEY (newcol) 
REFERENCES othertable(id); 

我收到以下错误:

"#1452 - Cannot add or update a child row: a foreign key constraint fails." 

所有其他的表包含数据,但我知道,如果我把test表,并与外键创建它,将工作。如果我放弃测试表,它会删除很多记录,我想避免复制数据并重新插入它。

任何人都可以告诉我如何通过外键添加一个新的列?

回答

1

该错误消息表示您在newcol中的值在othertable id列中不存在。通过添加一列INT NOT NULL,可以将该列的所有初始值设置为0。如果你不具备0的ID在othertable,你有钥匙不匹配

尝试此查询:

SELECT newcol 
FROM test 
WHERE newcol NOT IN (
    SELECT id 
    FROM othertable 
) 

,如果你得到任何结果返回,那么你的键值newcol违反FK限制

+0

我应该怎么做才能修复它,以便我添加外键 – GGio 2013-02-10 01:30:44

+0

您需要更新测试newcol值,以便它们对应于othertable id列中的值。 – WebChemist 2013-02-10 01:32:37

+0

明白了,非常感谢 – GGio 2013-02-10 01:32:59