当前位置: 首页 > 面试题库 >

MySQL中的OR约束或非null约束

谷梁博易
2023-03-14
问题内容

在MySQL中创建非NULL约束以使fieldA和fieldB不能都为NULL的最佳方法是什么。我不在乎任何一个本身是否为NULL,只要另一个字段具有非NULL值即可。而且,如果它们都具有非NULL值,那就更好了。


问题答案:

MySQL
5.5引入了SIGNAL,因此我们不再需要Bill
Karwin的答案中的额外列。Bill指出您还需要一个更新触发器,因此我也将其包括在内。

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


 类似资料:
  • 主要内容:在创建表时设置非空约束,在修改表时添加非空约束,删除非空约束MySQL非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。 比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约

  • 问题内容: 我在MySQL的某些列上创建了约束表。然后在PHP中,我编写了一个脚本,用于通过插入查询插入数据。当我省略此插入语句中的列之一时,我会期望收到来自MySQL的错误消息,并且我期望脚本会失败。相反,MySQL在字段中插入空字符串。在其他省略的字段中,数据为NULL,这很好。有人可以告诉我我做错了什么吗? 我正在使用此表: 这个插入语句: 或使用绑定变量: 问题答案: 如果确定未使用显式默

  • 这是我的代码,但当我尝试插入另一个“analise”时,num\u cedula,num\u doente,data\u analise为NULL,它会给我这个错误(“错误:num\u cedula”列中的NULL值违反了非NULL约束细节:失败的行包含(32,Ortopedia,NULL,NULL,NULL,NULL,2019-12-02,glicemia,176,Instituicao1)。S

  • 主要内容:Oracle NOT NULL示例在本教程中,您将学习如何使用Oracle 约束强制列不接受值。 Oracle 约束指定列不能包含值。 Oracle 约束是通常在语句的列定义中使用的内联约束。 可以通过使用ALTER TABLE语句将约束添加到现有表。 在个语句中,在应用约束之后,不能包含任何值。 Oracle NOT NULL示例 以下声明创建表: 表有三列:附加费用,附加费名称和金额。 列是由约束指定的表的主键列,因此,Ora

  • 在默认的情况下,表的列接受 NULL 值。 SQL NOT NULL 约束 NOT NULL 约束强制列不接受 NULL 值。 NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。 下面的 SQL 强制 "P_Id" 列和 "LastName" 列不接受 NULL 值:CREATE TABLE Persons ( P_Id int NOT NULL

  • 我有这样的情况: 由于项目经理之间存在关系m:n,我将有第三个表: 其中(ManagerID,ProjectID)是Manager_has_Project的复合主键 让我们假设我们必须删除一个从我们的数据库中创建了一些项目的经理:SQL不会让我们这么做。我们可以在子表“on DELETE cascade”中添加对fk ManagerID的约束,但在这种情况下,我们将丢失有关(例如)有多少经理为一个