如何将列定义为OR列b NOT NULL?

时间:2015-11-09 14:41:38

标签: mysql sql check-constraints

我想知道是否可以为列require(rJava) .jinit() jRobot <- .jnew("java/awt/Robot") pressButton<-function() { jRobot$mousePress(J("java/awt/event/InputEvent")$BUTTON1_MASK) jRobot$mouseRelease(J("java/awt/event/InputEvent")$BUTTON1_MASK) } pressButton() 或列name创建非空约束。例如:

surname

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

4 个答案:

答案 0 :(得分:2)

标准的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中执行此操作需要触发器。

答案 1 :(得分:1)

MySQL不支持检查约束,但您可以执行类似with a trigger的操作。

答案 2 :(得分:0)

如果我理解正确:

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

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

并改变表格:

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

或者你可以选择IS NOT NULL:

SELECT LastName,FirstName FROM tablename
WHERE LastName IS NOT NULL

答案 3 :(得分:0)

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 ;