如何定义列 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 ;
我想知道是否可以为列 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 ;