我正在我的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 回答
这里的问题是您需要通过显式设置
child.parent_id
的值,手动将child
记录与parent
表中的相关记录链接起来 . 您的外键约束仅用于强制执行一条规则,该规则说明“当某个值添加到child.parent_id
时,它需要匹配parent.id
中的值 . ”此外,只有在设置了
child.parent_id
的值后,您的ON UPDATE
和ON DELETE
级联才会起作用 .