SQL,同一个表中的外键

时间:2016-10-26 22:06:04

标签: mysql sql foreign-keys

我可以让表中的列成为表中另一列的外键吗?例如,如果一列是OrderId而另一列是RelatedOrderId,则OrderId可以是"外键" RelatedOrderId?这种关系背后的想法是,它会告诉谁在看表,这两列可以有重叠值。

1 个答案:

答案 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 |
+---------+----------------+

原谅所选的数据类型。这只是一个例子。