phpMyAdmin - 外键不工作

phpMyAdmin - foreign key not working

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

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

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

当我创建新记录时,两个 table 都被正确填充,但是子项 table 中的 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');";

这里的问题是您需要通过 显式手动 link 您的 child 记录及其在 parent table 中的关联记录 设置 child.parent_id 的值。您的外键约束仅用于执行 "when a value is added to child.parent_id, it needs to match a value in parent.id."

的规则

此外,您的 ON UPDATEON DELETE 级联只有在您设置 child.parent_id 的值后才会起作用。