我有一个已建立的数据库,其中所有表都使用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
表并使用外键创建它,则它将起作用。如果删除测试表,它将删除很多记录,并且我想避免复制数据并重新插入。谁能告诉我如何通过外键添加新列?
最佳答案
该错误消息表示您在newcol
中具有othertable id
列中不存在的值。通过添加INT NOT NULL
列,可以将该列的所有初始值设置为0
。如果您在0
中没有ID为othertable
,则说明密钥不匹配
试试这个查询:
SELECT newcol
FROM test
WHERE newcol NOT IN (
SELECT id
FROM othertable
)
如果返回任何结果,则
newcol
中的键值违反FK约束