0

我有一个使用INNODBForeign Keys设置所有表的内置数据库。现在我需要修改一个表并添加一个引用另一个表的新列。我的查询是:

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表并使用外键创建它,它将起作用。如果我删除测试表,它将删除很多记录,我想避免复制数据并重新插入它。

谁能告诉我如何通过外键添加新列?

4

1 回答 1

1

该错误消息意味着您的值在列newcol中不存在othertable id。通过添加 的一列INT NOT NULL,您将该列的所有初始值设置为0。如果您没有 in 的 id 0othertable则您的密钥不匹配

试试这个查询:

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

如果您返回任何结果,那么您的关键值newcol违反了 FK 限制

于 2013-02-10T01:25:40.380 回答