MySQL,是否可以防止两个字段为NULL 或NOT NULL?
MySQL, possible to prevent two fields to be NULL or NOT NULL?
一个简单的table:
ID, NAME, POST_ID, GROUP_ID
必须设置 POST_ID 或 GROUP_ID,但绝不能同时设置两者,也不能设置 none。所以,
有有效案例:
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
能设置这么复杂的限制规则吗?
您可以在创建 TABLE 时使用 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)
);
您必须在 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 的版本略微更改语法。
一个简单的table:
ID, NAME, POST_ID, GROUP_ID
必须设置 POST_ID 或 GROUP_ID,但绝不能同时设置两者,也不能设置 none。所以,
有有效案例:
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
能设置这么复杂的限制规则吗?
您可以在创建 TABLE 时使用 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)
);
您必须在 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 的版本略微更改语法。