MySQL错误:无法添加或更新子行:外键约束失败

时间:2011-06-02 18:17:28

标签: php mysql

所以场景是这样的:

我创建了一个包含表单的组,存储在test_groups_tb中,然后使用另一个表单输入用户ID以将它们附加到组中,并将它们存储在group_association_tb中,其结构如下:

group_id | user_id

我对MySQL很新,外键关系更新,所以我尝试在group_association_tb上建立一个关系,基本上,如果该组被删除,则从group_association_tb中删除该组的所有记录。

现在应用此事件后发生的事情是该组存储正常。我可以手动添加学生,但是当我尝试通过导入csv添加它们时它不喜欢它。

这里是查询(我知道每次迭代都没有高效的查询):

while($row = mysql_fetch_assoc($result))
    {
        $sql = "INSERT INTO group_association_tb (group_id, user_id)VALUES('$group','".$row[user_id]."')";
        mysql_query($sql) or die(header("Location:error.php"));
    } 

这是我得到的错误:

Cannot add or update a child row: a foreign key constraint fails (`ece70141/group_association_tb`, CONSTRAINT `group_association_tb_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `test_groups_tb` (`group_id`) ON DELETE CASCADE)

有人可以解释这里的问题。

非常感谢,

2 个答案:

答案 0 :(得分:1)

对于那些遇到问题的人“ERROR 1216:无法添加或更新子行:外键约束失败”,它实际上意味着它所说的!孩子的某些行不符合约束,纠正问题。 你找到这样的行: select child.id from child left join parent on(child.parent_id = parent.id)其中child.id不为null且parent.id为null;

(来自http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

答案 1 :(得分:0)

编辑:我认为您需要反转约束。 test_groups_tb需要引用grop_association_tbl。

您好像没有将group_association_tb表中引用的group_id添加到test_group_tb表中。如果group_association_tb中的外键引用了test_group_tb中的键,则该键必须位于test_group_tb中,然后才能将其添加到group_association_tb。

例如:

我有一个表(user_group)_定义如下:

group_id, first_name, last_name

另一个(group_permission)如下:

group_id, permission_name

如果我从group_permission创建一个引用user_group的外键,我就无法使用user_group中不存在的group_id向group_permission添加行。首先,我必须使用给定的group_id在user_group中创建行,然后使用user_group中相关行的group_id插入group_permission表。