在phpMyAdmin上添加外键失败

时间:2017-05-20 02:43:01

标签: mysql phpmyadmin

我整夜都在尝试这个但仍然无法完成,这是自动生成的查询:

ALTER TABLE  `avatar` ADD FOREIGN KEY (  `characterID` ) REFERENCES `201701_481_g02`.`character_table` (

`characterID`
) ON DELETE RESTRICT ON UPDATE RESTRICT ;

错误消息:

1452 - 无法添加或更新子行:外键约束失败(201701_481_g02#sql-6595d_522e8,CONSTRAINT #sql-6595d_522e8_ibfk_1 FOREIGN KEY(characterID)REFERENCES {{1 (character_table))

2 个答案:

答案 0 :(得分:1)

此行为最可能的解释是avatar表格中characterID的值未显示在character_table中的行。

我们可以使用具有反连接模式的查询来标识这些值。例如

  SELECT a.characterID
    FROM `avatar` a
    LEFT
    JOIN `201701_481_g02`.`character_table` c
      ON c.characterID = a.characterID
   WHERE c.characterID IS NULL

通过识别这些值,我们可以在引用的表中创建具有characterID列中适当值的行。或者我们可以删除或修改avatar中的行。

我认为当没有引用列作为前导列的索引时会引发不同的错误。如果两列的数据类型不完全匹配。

答案 1 :(得分:0)

根据Mysql文档的错误代码1452,

  

外键关系涉及包含中心数据值的父表,以及具有指向其父级的相同值的子表。 FOREIGN KEY子句在子表中指定。

     

如果父表中没有匹配的候选键值,它将拒绝任何尝试在子表中创建外键值的INSERT或UPDATE操作。

因此,在您的情况下,子表(头像)上的外键 characterID 在父表中没有匹配的候选键值( character_table