首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL中的OR非空约束

MySQL中的OR非空约束
EN

Stack Overflow用户
提问于 2018-08-27 04:31:22
回答 2查看 0关注 0票数 0

在MySQL中创建非NULL约束的最佳方法是什么,fieldA和fieldB不能都是NULL。我不关心其中任何一个本身是NULL,只要其他字段具有非NULL值。如果它们都具有非NULL值,那么它甚至更好。

EN

Stack Overflow用户

发布于 2018-08-27 12:59:05

MySQL 5.5引入了SIGNAL,因此我们不再需要Bill Karwin的答案中的额外列。比尔指出你还需要一个更新触发器,所以我也包括了。

代码语言:javascript
复制
CREATE TABLE foo (
  FieldA INT,
  FieldB INT
);

DELIMITER //
CREATE TRIGGER InsertFieldABNotNull BEFORE INSERT ON foo
FOR EACH ROW BEGIN
  IF (NEW.FieldA IS NULL AND NEW.FieldB IS NULL) THEN
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = '\'FieldA\' and \'FieldB\' cannot both be null';
  END IF;
END//
CREATE TRIGGER UpdateFieldABNotNull BEFORE UPDATE ON foo
FOR EACH ROW BEGIN
  IF (NEW.FieldA IS NULL AND NEW.FieldB IS NULL) THEN
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = '\'FieldA\' and \'FieldB\' cannot both be null';
  END IF;
END//
DELIMITER ;

INSERT INTO foo (FieldA, FieldB) VALUES (NULL, 10); -- OK
INSERT INTO foo (FieldA, FieldB) VALUES (10, NULL); -- OK
INSERT INTO foo (FieldA, FieldB) VALUES (NULL, NULL); -- gives error
UPDATE foo SET FieldA = NULL; -- gives error
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档