MySQL:如何创建属性";“可为空”;只有在一定条件下

MySQL:如何创建属性";“可为空”;只有在一定条件下,mysql,sql,create-table,check-constraints,Mysql,Sql,Create Table,Check Constraints,我正在为DB创建一个表,我希望(如果可能的话)执行以下操作: 当且仅当属性Y为“value1”时,属性X可以为NULL 有办法做到这一点吗?我想这样做是因为我可以删除一个实体,降低项目的复杂性(或者至少我认为我会得到一些好处) 谢谢:)在MySQL的最新版本中,您可以使用检查约束: create table mytable ( x int, y int, check(x is not null or y = 1) ) 如果MySQL版本不够新,无法使用CHECK约束(低

我正在为DB创建一个表,我希望(如果可能的话)执行以下操作: 当且仅当属性Y为“value1”时,属性X可以为NULL

有办法做到这一点吗?我想这样做是因为我可以删除一个实体,降低项目的复杂性(或者至少我认为我会得到一些好处)


谢谢:)

在MySQL的最新版本中,您可以使用检查约束:

create table mytable (
    x int,
    y int,
    check(x is not null or y = 1)
)

如果MySQL版本不够新,无法使用CHECK约束(低于8.0.16),则使用

DELIMITER@@@1;
创建触发器tr_bi_check_my_约束
插入前
在我的桌子上
每行
开始
如果NEW.attribute_X为空且NEW.attribute_Y!='值1'那么
信号SQLSTATE 45000
SET MESSAGE_TEXT='当且仅当属性Y为“value1”时,属性X可以为NULL;
如果结束;
结束
@@;
创建触发器tr_bu_check_my_约束
更新前
在我的桌子上
每行
开始
如果NEW.attribute_X为空且NEW.attribute_Y!='值1'那么
信号SQLSTATE 45000
SET MESSAGE_TEXT='当且仅当属性Y为“value1”时,属性X可以为NULL;
如果结束;
结束
@@;
定界符;