phpMyAdmin - 外键不起作用

时间:2016-01-08 18:06:05

标签: php mysql database phpmyadmin foreign-keys

我正在我的cPanel服务器上的phpMyAdmin中建立两个表之间的外键关系 - 我只是称它们为'parent'和'child'以保持简单。在子表中,我有一个parent_id列,我想用父表中的id号填充。我已经遵循了一些关于此的教程,但它似乎没有工作 - 创建了新记录,但子表上的parent_id列仍为NULL。

我的html表单数据传递给PHP,它将数据插入到同一个操作中的两个单独的表(parent和child)中。父表和子表基本上是重复的,但将来我可能会添加额外的子表,因此需要外键关系 - 基本上是一个主表与未连接的本地表。

在phpMyAdmin中,我将父表和子表的存储引擎设置为InnoDB。在子表中,我添加了一个parent_id列,将默认值设置为NULL,并允许为NULL。然后我索引该列,并将外键约束设置为'parent'。'ID'。 phpMyAdmin自动生成一个约束名称'child_ibfk_1'。 ON DELETE和ON UPDATE都设置为级联。

当我创建一个新记录时,两个表都被正确填充,但子表中的parent_id列是NULL而不是父记录的ID。

谁能看到我在这里做错了什么?非常感谢。

编辑 - php插入语句:

$sql = "INSERT INTO parent (date, time, latitude, longitude, accuracy, species, deadinjured, sex, age, name, contact_info, notes, source)
VALUES ('$date', '$time', '$latitude', '$longitude', '$accuracy', '$species', '$deadinjured', '$sex', '$age', '$name', '$contact_info', '$notes', 'source 1');";

$sql .= "INSERT INTO child (date, time, latitude, longitude, accuracy, species, deadinjured, sex, age, name, contact_info, notes)
VALUES ('$date', '$time', '$latitude', '$longitude', '$accuracy', '$species', '$deadinjured', '$sex', '$age', '$name', '$contact_info', '$notes');";

1 个答案:

答案 0 :(得分:2)

此处的问题是,您需要手动将child记录与parent表中的关联记录相关联,显式设置{{1}的值}。您的外键约束仅用于强制执行以下规则:"当某个值添加到child.parent_id时,它需要匹配child.parent_id中的值。"

此外,您的parent.idON UPDATE级联仅在您设置ON DELETE的值后才能生效。