MySql工作台CHECK约束

时间:2016-08-20 15:07:04

标签: mysql mysql-workbench check-constraints

这里我想在记录插入数据库之前创建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.
  3. 当我在MySql Workbench中键入此语法时,它会投诉&#34;语法错误:意外&#39;检查&#39; (检查)&#39 ;.我应该如何使用TRIGGER添加这些?

    谢谢。

2 个答案:

答案 0 :(得分:5)

由于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 s定义相同的触发器。

答案 1 :(得分:0)

评论有点长。

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

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

Check实际上并未在任何引擎中实现,因此不执行任何操作。据推测,它不是constraint语法的一部分,因此不适用于add constraint