MySql workbench CHECK 约束

MySql workbench CHECK constraint

这里我想在记录插入数据库之前创建2个CHECK约束。

ALTER TABLE SubjectEnrollment
ADD CONSTRAINT register CHECK (register <= classSize AND register >=0),
ADD CONSTRAINT available CHECK (available <= classSize AND available >= 0);
  1. register 属性不应大于 classSize 属性且小于 0。
  2. 可用属性不应大于 classSize 属性且小于 0。

当我在 MySql Workbench 中输入此语法时,它会抱怨“语法错误:意外的 'CHECK'(检查)”。我应该如何添加这些,使用 TRIGGER?

谢谢。

评论有点长。

MySQL 支持 check 的语法,但在 create table:

create table (
    . . . 
    CHECK (register <= classSize AND register >= 0)
);

Check 实际上并没有在任何引擎中实现,所以这什么都不做。大概是出于这个原因,它不是 constraint 语法的一部分,因此不适用于 add constraint.

由于 MySQL 不支持 check,因此您需要一个触发器。像这样的 CREATE 触发器:

delimiter $$
CREATE TRIGGER some_trigger_name
BEFORE INSERT ON SubjectEnrollment
FOR EACH ROW
BEGIN    
    IF (NEW.register > NEW.classSize OR NEW.register < 0)        
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'invalid data';
    END IF;
END
$$

您需要为 UPDATE 定义相同的触发器。