在SQL中这有什么区别

create table marriage (
    person1 int not null references human on delete cascade,
    person2 int not null references human on delete cascade,
    primary key (person1, person2)
);


还有这个

create table marriage (
    person1 int not null references human on delete cascade,
    person2 int not null references human on delete cascade,
    primary key (person1),
    unique (person2)
);


带有两个主键的表是否可以防止这种情况?

marriage:

person1 | person2
   1         2
   2         1

最佳答案

第一个索引是两列的唯一索引:这意味着两者的组合应该是唯一的。行1,2和2,1不会违反索引,因为索引将它们视为一组。 1,2和1,3也不违反索引。

第二个示例包含两个索引,并且两个索引都必须唯一。这意味着具有1,2和1,3的行违反了索引约束。

09-26 15:08