这就是我想要做的事:如何使用自动增加的主键作为外键?
我有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";
它失败,错误:
Cannot add or update a child row: a foreign key constraint fails (
anacorbero
.parent
, CONSTRAINTparent_ibfk_1
FOREIGN KEY (id
) REFERENCESchild
(parent_id
))
我所知,这是因为它没有找到失败子表中的引用记录。如果我通过在子表中创建一条记录开始,将它的parent_id设置为1,然后重置父表的自动递增计数器(以便下一个插入将具有id = 1),它就可以工作!但这不是一个解决方案。
我没有看到插入阻塞,如果没有相关的行中的子表的工具...
我只是试图做一个一对多的关系...
(我知道我可以使用加入,但我想用表关系,为数据的完整性,也作为PHP元)
+1:当我读到你的答案时,我意识到我误读了这个问题。 – 2010-08-23 02:23:32
感谢您的快速回答。我只是意识到我自己! – Rolf 2010-08-23 02:26:41
我已经在SQL Server 2012中定义了身份,但我试图将一些值传递给db。所以在那个地方(自动递增),我需要通过什么? – 2013-12-11 15:24:11