无法向存在的表添加外键

时间:2013-12-28 16:08:56

标签: mysql sql foreign-keys

我无法在存在的表中添加外键。我想在表publisher_id引用gamespublishers)中添加外键publisher_id

但是当运行下面的sql时,它说:

  

源列和目标列必须具有相同的数据类型,目标列上必须有索引,并且必须存在引用的数据。   无法添加或更新子行:外键约束失败(vngarena.com#sql-818_1b1,CONSTRAINT #sql-818_1b1_ibfk_2 FOREIGN KEY(publisher_id)REFERENCES publishers({{ 1}})ON DELETE CASCADE ON UPDATE CASCADE

sql是:

  

ALTER TABLE publisher_id
  添加外键(games)参考publisher_idpublishers)ON更新CASCADE上的DELCAD CASCADE;

这是我的db的图表:

enter image description here

更多信息:
- 表publisher_id有两个记录
- 表games有其他外键引用表gamesgamecats
- 表gamecat_id有两个记录
- 表gamecats没有记录

2 个答案:

答案 0 :(得分:3)

如果有任何现有数据违反了这种关系,您需要在添加密钥之前将其清理干净。

[编辑]编辑后:桌面游戏中的publisher_id正在publishers表中查找匹配项。添加一个ID与游戏表中的内容匹配的发布商。

答案 1 :(得分:0)

您需要在添加外键之前删除游戏表记录。

如果添加外键,则应与现有数据匹配。在您的情况下,publishers表没有记录。因此,如果您在游戏表中添加记录数据

,它将失败foreign key
                             or

您应该在publishers表中添加两条记录,游戏表中存在相同的键。

有关详细信息,请参阅以下链接 Foreign Key