有没有办法创建一个包含多列的表,并且其中 2 列在同一记录中永远不应该为空。
例如,我需要制作C
和 D
不知何故,他们每个人都可能是null
如果另一个不是 null
在同一条记录中。
我有什么办法吗?
| A | B | C | D | E |
|---|---|---|---|---|
| | | | | |
| | | | | |
| | | | | |
而且它们在一起永远不应该有值(value)
最佳答案
如 @lad2025 所述,MySQL 不支持 CHECK 约束。正如@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
请记住创建一个类似的触发器 BEFORE UPDATE
来检查无效条件,否则无效数据可能会在行创建后通过 UPDATE 潜入。
关于MySQL - 在多个列上一起创建不为空的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902512/