首页 > 解决方案 > MySQL,可以防止两个字段为 NULL 或 NOT NULL?

问题描述

一个简单的表格:

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

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

标签: mysqlsqlforeign-keysrestriction

解决方案


您可以CHECK在创建 TABLE 时使用约束:

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)
);

推荐阅读