-1
我可以將表中的列作爲表中另一列的外鍵嗎?例如,如果一列是OrderId
而另一列是RelatedOrderId
,那麼OrderId
可能是RelatedOrderId
的「外鍵」?這種關係背後的想法是,它會告訴誰在查看錶中的那兩列可以有重疊的值。SQL,同一表中的外鍵
我可以將表中的列作爲表中另一列的外鍵嗎?例如,如果一列是OrderId
而另一列是RelatedOrderId
,那麼OrderId
可能是RelatedOrderId
的「外鍵」?這種關係背後的想法是,它會告訴誰在查看錶中的那兩列可以有重疊的值。SQL,同一表中的外鍵
這可能是接近你可以得到:
CREATE TABLE `a9` (
`orderId` int(11) NOT NULL,
`relatedOrderId` int(11) DEFAULT NULL,
PRIMARY KEY (`orderId`),
KEY `abcd3` (`relatedOrderId`),
CONSTRAINT `abcd3` FOREIGN KEY (`relatedOrderId`) REFERENCES `a9` (`orderId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert a9(orderId,relatedOrderId) values (1,null); -- success
insert a9(orderId,relatedOrderId) values (2,3); -- Error 1452
insert a9(orderId,relatedOrderId) values (2,1); -- success
而參照完整性是不是在列relatedOrderId
一個NULL
非常強。但至少它暗示,如果不是NULL
那麼它是有效的。
要實現一個圓形參考,人們將需要做下面這似乎魚腥。
insert a9(orderId,relatedOrderId) values (1,null); -- success
insert a9(orderId,relatedOrderId) values (2,1); -- success
update a9 set relatedOrderId=2 where orderId=1; -- success
select * from a9;
+---------+----------------+
| orderId | relatedOrderId |
+---------+----------------+
| 2 | 1 |
| 1 | 2 |
+---------+----------------+
原諒所選的數據類型。這只是一個例子。
是的,你可以。表有時候會引用它們自己。 –