创建关系:#1452 - 无法添加或更新子行:外键约束失败

时间:2011-09-01 18:03:52

标签: mysql

我试图创建一个新的表关系,但我似乎遇到了一个错误,我不知道为什么。我做的第一个关系(一对多)是上周,它运作良好,也许我忘了正确的程序?

简单说明: 我有三张桌子 - 活动,音乐风格,场地

到目前为止,我正确地将事件和场所联系起来,就像一个场地可以有多个与之相关的事件。我尝试制作一个新表,其中包含每个音乐风格的行和一个将在表'事件'中使用的ID,以便我可以将每个事件链接到音乐风格ID。

然而,这是我得到的错误:

  

SQL查询:

     

ALTER TABLE events ADD FOREIGN KEY(MUSIC_STYLE_ID)REFERENCES   nightl7_completemusic_stylesMUSIC_ID)ON DELETE NO ACTION   ON UPDATE NO ACTION;

     

MySQL说:文档

     

1452 - 无法添加或更新子行:外键约束

     

失败(nightl7_complete/#sql-2721_c0dcfd,CONSTRAINT   #sql-2721_c0dcfd_ibfk_2 FOREIGN KEY(MUSIC_STYLE_ID)参考   music_stylesMUSIC_ID)ON更新没有动作更新无动作)   文档错误ALTER TABLE events添加外键(   MUSIC_STYLE_ID)参考nightl7_completemusic_styles(   MUSIC_ID)在更新时不执行任何操作;

这是我做的程序:)

enter image description here

I uploaded a full sized image here

谢谢大家:)


编辑:

所以我这样做了:

$query = 'SELECT e.* FROM events e '.
    'LEFT JOIN nightl7_complete.music_styles ms ON ms.ID = e.MUSIC_STYLE_ID'.
    'WHERE ms.id IS NULL';
$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}

得到了这个:

查询无效:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的“ms.id IS NULL”附近使用正确的语法

1 个答案:

答案 0 :(得分:2)

您不想将MUSIC_STYLE_IDID联系起来,而不是MUSIC_ID吗?

此外,您需要使用MUSIC_STYLE_ID中的有效ID预先填充music_styles,或者在创建外键之前将它们设置为null。

要验证这一点,请尝试:

SELECT e.*
  FROM events e
  LEFT JOIN nightl7_complete.music_styles ms ON ms.ID = e.MUSIC_STYLE_ID
  WHERE ms.id IS NULL;

如果该查询返回任何记录,则events中的条目不包含music_styles中的相应记录