【问题标题】:Creating relations: #1452 - Cannot add or update a child row: a foreign key constraint fails创建关系:#1452 - 无法添加或更新子行:外键约束失败
【发布时间】:2011-09-01 18:03:52
【问题描述】:

我试图创建一个新的表关系,但我似乎遇到了一个错误,我不知道为什么。我上周建立的第一个关系(一对多),效果很好,也许我从那以后忘记了正确的程序?

简单解释: 我有三张桌子 - events、music_styles、venues

到目前为止,我正确地链接了活动和场地,一个场地可以链接多个活动。我尝试创建一个新表,其中包含每种音乐风格的行和一个将在表“事件”中使用的 ID,以便我可以将每个事件链接到音乐风格 ID。

但这是我得到的错误:

SQL 查询:

ALTER TABLE events 添加外键 (MUSIC_STYLE_ID) 参考 nightl7_complete.music_styles (MUSIC_ID) 删除无操作 更新无操作;

MySQL 说:文档

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

失败 (nightl7_complete/#sql-2721_c0dcfd, 约束 #sql-2721_c0dcfd_ibfk_2 外键 (MUSIC_STYLE_ID) 参考 music_styles (MUSIC_ID) ON DELETE NO ACTION ON UPDATE NO ACTION) 文档错误 ALTER TABLE events ADD FOREIGN KEY ( MUSIC_STYLE_ID) 参考资料nightl7_complete.music_styles ( MUSIC_ID) 删除时不执行更新时不执行操作;

这是我做的程序:)

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”附近使用正确的语法

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您不想将MUSIC_STYLE_ID 链接到ID,而不是MUSIC_ID

    此外,您需要使用来自 music_styles 的有效 id 预填充 MUSIC_STYLE_ID,或者在创建外键之前将它们设置为 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 中相应记录的条目

    【讨论】:

    • 嗨,Doug,我确实在 music_styles 表中预先填充了 68 行。我按照你的建议使用 ID,但我仍然有同样的错误。 #1452 - 无法添加或更新子行:外键约束失败(nightl7_complete/#sql-2721_c1caae, CONSTRAINT #sql-2721_c1caae_ibfk_2 FOREIGN KEY (MUSIC_STYLE_ID) REFERENCES music_styles (ID) ON DELETE NO ACTION ON UPDATE NO ACTION)
    • 那么,对于events 中的每一行,MUSIC_STYLE_ID 中的值在music_styles.id 中是否可用?我将使用建议的查询来修改我的问题以检查...
    • 我删除了列 MUSIC_STYLE_ID,并且由于 music_styles.ID 已经被索引,我想我可以将它用作外键?
    • 嗯,也许我在某个地方犯了错误?编辑:我只会更新我的主要帖子
    猜你喜欢
    • 2013-05-11
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2021-09-04
    相关资源
    最近更新 更多