我无法在存在的表中添加外键。我想在表publisher_id
引用games
(publishers
)中添加外键publisher_id
。
但是当运行下面的sql时,它说:
源列和目标列必须具有相同的数据类型,目标列上必须有索引,并且必须存在引用的数据。 无法添加或更新子行:外键约束失败(
vngarena.com
。#sql-818_1b1
,CONSTRAINT#sql-818_1b1_ibfk_2
FOREIGN KEY(publisher_id
)REFERENCESpublishers
({{ 1}})ON DELETE CASCADE ON UPDATE CASCADE
sql是:
ALTER TABLE
publisher_id
添加外键(games
)参考publisher_id
(publishers
)ON更新CASCADE上的DELCAD CASCADE;
这是我的db的图表:
更多信息:
- 表publisher_id
有两个记录
- 表games
有其他外键引用表games
(gamecats
)
- 表gamecat_id
有两个记录
- 表gamecats
没有记录
答案 0 :(得分:3)
如果有任何现有数据违反了这种关系,您需要在添加密钥之前将其清理干净。
[编辑]编辑后:桌面游戏中的publisher_id正在publishers表中查找匹配项。添加一个ID与游戏表中的内容匹配的发布商。
答案 1 :(得分:0)
您需要在添加外键之前删除游戏表记录。
如果添加外键,则应与现有数据匹配。在您的情况下,publishers表没有记录。因此,如果您在游戏表中添加记录数据
,它将失败foreign key
or
您应该在publishers表中添加两条记录,游戏表中存在相同的键。
有关详细信息,请参阅以下链接 Foreign Key