我正在尝试制作一个包含两个字段(id1,id2)的表,其中两个字段都将id作为其他表中的外键引用,并且这两种方式都是唯一的。

快速示例:

具有字段ID和名称的表“ people”。具有字段ID1和ID2的表“婚姻”。现在,如果我知道id = 3的某人已嫁给id = 6,则无需在“结婚”表中拥有(id1 = 3,id2 = 6)和(id1 = 6,id2 = 3)。

最佳答案

在大多数数据库中,可以使用check约束进行此操作。就像是:

alter table t add constraint chk_t_id1_id2 check (id1 < id2)


或者,使用表达式或计算列来唯一索引:

create unique index unq_t_id1_id2 on (least(id1, id2), greatest(id1, id2));


MySQL的最新版本支持生成的列,因此您可以对生成的列执行与上述类似的操作。

否则,您需要使用触发器。这绝对是可行的,但是在插入和更新时都需要考虑逻辑。触发器比约束更多。

关于mysql - 用两个唯一的字段创建表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44102891/

10-13 02:51