我正在我的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');";
答案 0 :(得分:2)
此处的问题是,您需要手动将child
记录与parent
表中的关联记录相关联,显式设置{{1}的值}。您的外键约束仅用于强制执行以下规则:"当某个值添加到child.parent_id
时,它需要匹配child.parent_id
中的值。"
此外,您的parent.id
和ON UPDATE
级联仅在您设置ON DELETE
的值后才能生效。