无论如何都要创建一个包含多个列的表,其中2个在同一记录中永远不应为null.
例如,我需要以某种方式使C和D,如果另一个在同一记录中不为null,则它们中的每一个都可以为null.
我有什么办法吗?
| A | B | C | D | E |
|---|---|---|---|---|
| | | | | |
| | | | | |
| | | | | |
他们永远不应该有共同的价值
解决方法:
MySQL不支持CHECK约束,如@ lad2025所述.正如@RaymondNijland评论的那样,您可以使用触发器执行此操作.
这是它的外观(在MySQL 5.6.37上测试):
mysql> DELIMITER ;;
mysql> CREATE TRIGGER not_both_null BEFORE INSERT ON a_table_with_multiple_columns
FOR EACH ROW BEGIN
IF (NEW.c IS NULL AND NEW.d IS NULL) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'One of C and D must be non-null';
END IF;
END ;;
mysql> DELIMITER ;
mysql> insert into a_table_with_multiple_columns set c=null, d=null;
ERROR 1644 (45000): One of C and D must be non-null
请记住在UPFATE之前创建一个类似的触发器以检查无效条件,否则在创建行之后,无效数据可以通过UPDATE潜入.
标签:check-constraints,sql,mysql,database
来源: https://codeday.me/bug/20190828/1747676.html