是否可以在一组行而不是整个表中具有唯一性?

时间:2010-12-07 08:33:28

标签: mysql database database-design

我有一张像

这样的表格
CREATE TABLE IF NOT EXISTS grouped_executions (
    id             INTEGER UNSIGNET NOT NULL ,
    execution_id   INTEGER UNSIGNED NOT NULL REFERENCES execution.execution_id ,
    president      BOOLEAN NOT NULL DEFAULT 0

    PRIMARY KEY ( id, execution_id )
) ENGINE = InnoDB ;

我想要的是让总统在一组具有相同身份的行中独一无二。

例如:我有这样的数据:

id | execution_id | president
= - = - = - = - = - = - = - =
1  | 1            | 0
1  | 2            | 1
1  | 3            | 0
1  | 4            | 0
我希望mysql阻止插入id = 1&的新行总统= 1

(当然我可以制作另一张持有小组主席但可能超出结构的桌子吗?)

3 个答案:

答案 0 :(得分:3)

是的,您可以为两列的组合添加唯一约束。

答案 1 :(得分:1)

您可能想尝试为president设置默认NULL,因为唯一键允许多个NULL值,但是,只有一个bool是没有意义的1和许多NULL,但没有0。如果你不想设置其他机制,比如触发器(由@David Hedlund建议),你最好使用另一个表来表示该关系(正如你提到的那样)。这样,如果你有一天想要一个独特的“秘书”或“财政部”,那么很容易定义一个新表而不是让那个触发器(或另一个)验证这种关系。

答案 2 :(得分:-1)

你试过这个吗?

ALTER TABLE grouped_executions ADD CONSTRAINT PRIMARY KEY (id, president);