我有一张像
这样的表格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
(当然我可以制作另一张持有小组主席但可能超出结构的桌子吗?)
答案 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);