这就是我想要做的:
我有2张桌子……
- @H_301_8@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;
然后是一个约束:
- @H_301_8@ALTER TABLE `parent` ADD FOREIGN KEY (`id`) REFERENCES `child` (`parent_id`);
如您所见,表parent具有自动递增的主键“id”,该主键也用作子表的外键.
现在我想在父表中插入一条记录,如下所示:
- @H_301_8@INSERT INTO parent SET DATA="abc";
它失败了,错误:
Cannot add or update a child row: a
foreign key constraint fails
(@H_301_8@anacorbero.@H_301_8@parent,CONSTRAINT
@H_301_8@parent_ibfk_1 FOREIGN KEY (@H_301_8@id)
REFERENCES @H_301_8@child (@H_301_8@parent_id))
我知道它失败了,因为它没有在子表中找到引用的记录.如果我开始在子表中创建一个记录,将它的parent_id设置为1,然后重置父表的自动增量计数器(以便下一个插入将具有id = 1),它的工作原理!但那不是解决方案.
如果子表中没有相关的行,我没有看到插入阻塞的效用…
我只是想做一对多的关系……
(我知道我可以使用JOIN,但我正在尝试使用表关系,数据完整性以及PHP的元数据)