如何定义列 a 或列 b NOT NULL?

How define column a OR column b NOT NULL?

我想知道是否可以为列 name 或列 surname 创建非空约束。例如:

create table football_players (
    id VARCHAR(36) PRIMARY KEY,
    name VARCHAR(20),
    surname VARCHAR(20)
);

有时我们知道名字或姓氏,但不能同时知道两者。我不想要我的数据库中没有名字的玩家。

标准 SQL 方法是:

create table football_players (
    id VARCHAR(36) PRIMARY KEY,
    name VARCHAR(20),
    surname VARCHAR(20),
    constraint chk_name_surname check (name is not null or surname is not null)
);

这在 MySQL 中不起作用(问题最初未标记 MySQL)。在 MySQL 中执行此操作需要触发器。

如果我没理解错的话:

您可以询问 PHP 中要加载的任何数据是否为空。例如:

If (!isset($name)) {
    //code sql
}
else if (!isset($lastname)){
    //code sql
}
else {
    //code sql
}

并改变 table:

alter table TABLENAME modify FIELD varchar(40) not null default ''

或者你可以 select IS NOT NULL:

SELECT LastName,FirstName FROM tablename
WHERE LastName IS NOT NULL

MySQL不支持检查约束,但你可以做类似的事情with a trigger

DELIMITER //
CREATE TRIGGER trigger_players_name_not_null BEFORE INSERT ON players
   FOR EACH ROW BEGIN
   DECLARE dummy,baddata INT;
   SET baddata = 0;
      IF NEW.name is null and NEW.surname is null THEN SET baddata = 1;
      END IF;
      IF baddata = 1 THEN
         SELECT CONCAT('Cannot Insert This Because Age ',NEW.name, NEW.surname,' are Invalid')
         INTO dummy FROM information_schema.tables;
      END IF;
END
//
DELIMITER ;