-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 |
+---------+----------------+
原谅所选的数据类型。这只是一个例子。
是的,你可以。表有时候会引用它们自己。 –