MySQL将外键添加到现有表PHP

时间:2013-02-10 01:16:35

标签: mysql foreign-keys relational-database

我有一个构建的数据库,所有表格都使用 INNODB 外键设置。现在我需要修改单个表并添加一个引用另一个表的新列。我的疑问是:

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 个答案:

答案 0 :(得分:1)

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

尝试此查询:

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

如果您收到任何结果,那么newcol中的键值会违反FK限制