这就是我想要做的:
我有2张桌子...
CREATE TABLE `parent` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `child` (
`parent_id` int(11) DEFAULT NULL,
`related_ids` int(11) DEFAULT NULL,
KEY `parent_id` (`parent_id`),
KEY `related_ids` (`related_ids`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后是一个约束:
ALTER TABLE `parent` ADD FOREIGN KEY (`id`) REFERENCES `child` (`parent_id`);
如您所见,父表有一个自动递增的主键“id”,它也被用作子表的外键。
现在我想在父表中插入一条记录,如下所示:
INSERT INTO parent SET DATA="abc";
它失败并出现错误:
无法添加或更新子行:外键约束失败 (
myschema
.parent
, CONSTRAINTparent_ibfk_1
FOREIGN KEY (id
) REFERENCESchild
(parent_id
))
我知道它失败了,因为它没有在子表中找到引用的记录。如果我首先在子表中创建一条记录,将它的 parent_id 设置为 1,然后重置父表的自动增量计数器(以便下一个插入将具有 id = 1),它可以工作!但这不是解决方案。
如果子表中没有相关行,我看不到插入阻塞的实用程序......
我只是想建立一个一对多的关系......
(我知道我可以使用 JOIN,但我正在尝试使用表关系、数据完整性以及 PHP 的元数据)