首页 文章

phpMyAdmin - 外键不起作用

提问于
浏览
1

我正在我的cPanel服务器上的phpMyAdmin中 Build 两个表之间的外键关系 - 我只是称它们为'父'和'子'以保持简单 . 在子表中,我有一个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 回答

  • 2

    这里的问题是您需要通过显式设置 child.parent_id 的值,手动将 child 记录与 parent 表中的相关记录链接起来 . 您的外键约束仅用于强制执行一条规则,该规则说明“当某个值添加到 child.parent_id 时,它需要匹配 parent.id 中的值 . ”

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

相关问题