我可以让表中的列成为表中另一列的外键吗?例如,如果一列是OrderId
而另一列是RelatedOrderId
,则OrderId
可以是"外键" RelatedOrderId
?这种关系背后的想法是,它会告诉谁在看表,这两列可以有重叠值。
答案 0 :(得分:2)
这可能会尽可能接近:
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
NULL
列中relatedOrderId
的参照完整性并不十分强大。但至少它表明如果不是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 |
+---------+----------------+
原谅所选的数据类型。这只是一个例子。