MySQL,可以防止两个字段为NULL或NOT NULL吗?

时间:2018-08-30 12:34:30

标签: mysql sql foreign-keys restriction

一个简单的表:

ID, NAME, POST_ID, GROUP_ID

必须设置POST_ID或GROUP_ID,但不要同时设置两者,而无需设置。所以,

有有效的情况:

ID, NAME, POST_ID, GROUP_ID
x,   y,   1,       NULL
x,   y,   NULL,    4

和无效情况:

ID, NAME, POST_ID, GROUP_ID
x,   y,   NULL,    NULL
x,   y,   4,       4

是否可以设置如此复杂的限制规则?

2 个答案:

答案 0 :(得分:2)

您必须在CREATE和UPDATE事件上使用TRIGGERS,并在条件(COALESCE(POST_ID, GROUP_ID) IS NULL OR (POST_ID IS NOT NULL AND GROUP_ID IS NOT NULL))发生时抛出异常

以下是您问题的答案: Either OR non-null constraints in MySQL

这是过程,根据MySql的版本稍微更改语法。

答案 1 :(得分:1)

创建表时,可以使用CHECK约束:

CREATE TABLE Persons (
    ID int NOT NULL,
    NAME varchar(255) NOT NULL,
    POST_ID int,
    GROUP_ID int,
    CHECK (POST_ID IS NULL XOR GROUP_ID IS NULL)
);