2013-02-02 28 views
0

我很笨,为一位客户创建了一年前的表格。现在我知道了,应该已经使用了关系。现在我试图在Navicat中创建它们。执行:试图在Navicat中创建关系

ALTER TABLE geerdink_new.dossier 
    ADD CONSTRAINT fk_dossier_klant_1 
    FOREIGN KEY (dossierKlantID) 
    REFERENCES geerdink_new.klant (klantID) 

我得到一些错误:

[消息]失败 - 外键fk_dossier_klant_1错误 - 1452 - 不能添加或更新子行,外键约束失败(geerdink_new#sql-420_51,约束fk_dossier_klant_1外键(dossierKlantID)参考文献klantklantID))

我怎么能解决这个问题?

+0

,你能否告诉我们,这会产生错误的代码? –

+0

正在执行 - ALTER TABLE'geerdink_new'.'dossier' ADD CONSTRAINT'fk_dossier_klant_1' FOREIGN KEY('dossierKlantID')REFERENCES'geerdink_new'.'klant'('klantID') – Thijmen

回答

2

这不是Navicat错误,而是MySQL错误。东西是不匹配正确,当你尝试创建的约束,有可能:

1)列定义不相同(例如一个是无符号整数,而另一个是有符号整数)

2)一列中的值与您要创建关系的列中的值不符。

编辑:尝试此查询:

SELECT klantID FROM klant LEFT JOIN geerdink_new ON geerdink_new.dossierKlantId = klant.klantID WHERE dossierKlantId IS NULL; 
+0

这两个柱子都有相同的类型和长度.. – Thijmen

+0

After检查列数据类型,你可以运行这个'SELECT * FROM geerdink_new.dossier AS d WHERE NOT EXISTS(SELECT 1 FROM geerdink_new.klant AS k WHERE k.klantID = d.dossierKlantID);'在'dossier'中查找没有'klant'中的相关行。 –

+0

感谢上帝。那就是诀窍。谢谢! – Thijmen