mysql,可以防止两个字段为空还是不为空?

pkwftd7m  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(430)

简单的表格:

ID, NAME, POST_ID, GROUP_ID

必须设置post\u id或group\u 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

有没有可能设置这么复杂的限制规则?

mf98qq94

mf98qq941#

您必须在创建和更新事件时使用触发器,并在条件 (COALESCE(POST_ID, GROUP_ID) IS NULL OR (POST_ID IS NOT NULL AND GROUP_ID IS NOT NULL)) 发生
下面是您问题的答案:mysql中的非空约束或非空约束
这是程序,根据mysql的版本稍微修改一下语法。

kb5ga3dv

kb5ga3dv2#

你可以用 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)
);

相关问题