這就是我想要做的事:如何使用自動增加的主鍵作爲外鍵?
我有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