我正在尝试创建一个包含两个字段(id1,id2)的表,它们在其他表中都引用id作为外键,并且两种方式都是唯一的。
快速举例:
表'人'具有字段ID和名称。表'婚姻'有字段id1和id2。现在,如果我知道id = 3的人与id = 6结婚,那么'婚姻'表中就没有必要(id1 = 3,id2 = 6)和(id1 = 6,id2 = 3)。
答案 0 :(得分:0)
您可以使用外键约束..这是使用查询
执行此操作的方法CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
答案 1 :(得分:0)
在大多数数据库中,您可以使用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支持生成的列,因此您可以使用生成的列执行与上述类似的操作。
否则,您需要使用触发器。这绝对可行,但您需要考虑插入和更新的逻辑。触发器比约束更多的工作。