使用两个唯一的字段创建表

时间:2017-05-21 23:54:12

标签: mysql sql constraints

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

快速举例:

表'人'具有字段ID和名称。表'婚姻'有字段id1和id2。现在,如果我知道id = 3的人与id = 6结婚,那么'婚姻'表中就没有必要(id1 = 3,id2 = 6)和(id1 = 6,id2 = 3)。

2 个答案:

答案 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支持生成的列,因此您可以使用生成的列执行与上述类似的操作。

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