2 个唯一密钥,其中一个可能重复

2 unique key with one of them possible duplicate

你好,我想问一下是否可以设置2个唯一键,在某些情况下,其中一个可以重复,但另一个不能。

例子是这样的:

orderID          trans_date
   1          2016-02-25 01:00:00  
   1          2016-02-25 01:00:01
   2          2016-02-25 01:00:00

如你所见,如果我只将trans_date设置为唯一键,那么它就可以重复,它也与orderID相同。 因此,与其为其中之一创建唯一 ID,不如为它们都创建。 OrderID 和 trans_date 后面不能相同。

可能吗?

如果你希望两个键作为一对是唯一的,那么你可以创建一个唯一索引:

create unique index unq_example_orderid_transdate on example(orderID, trans_date);

或者,您可以创建一个唯一约束,其作用基本相同。

最好的方法是拥有一个主键。您可以在 orderID 和 trans_date 上有一个复合主键,这将允许您拥有多个 trans_date 与@Gordon 建议的值相同。

如果出于某种原因,复合主键不适合您的目的,您可以在 table 上设置一个触发器来检查您想要的所有条件,并允许交易继续进行或不进行。