mysql 外键改成递增_mysql – 如何使用自动递增的主键作为外键?

这就是我想要做的:

我有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`);

如您所见,表parent具有自动递增的主键“id”,该主键也用作子表的外键.

现在我想在父表中插入一条记录,如下所示:

INSERT INTO parent SET DATA="abc";

它失败了,错误:

Cannot add or update a child row: a

foreign key constraint fails

(anacorbero.parent,CONSTRAINT

parent_ibfk_1 FOREIGN KEY (id)

REFERENCES child (parent_id))

我知道它失败了,因为它没有在子表中找到引用的记录.如果我开始在子表中创建一个记录,将它的parent_id设置为1,然后重置父表的自动增量计数器(以便下一个插入将具有id = 1),它的工作原理!但那不是解决方案.

如果子表中没有相关的行,我没有看到插入阻塞的效用…

我只是想做一对多的关系……

(我知道我可以使用JOIN,但我正在尝试使用表关系,数据完整性以及PHP的元数据)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值