一个简单的表:
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
是否可以设置如此复杂的限制规则?
答案 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)
);