MySql工作台CHECK约束条件

问题描述:

这里我想在记录插入到数据库之前创建2个CHECK约束。MySql工作台CHECK约束条件

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

当我在此语法键入更多在MySql Workbench中,它投诉“Syntax Error:unexpected'CHECK'(check)'。我应该如何添加这些,使用TRIGGER?

谢谢

+2

为什么要麻烦? MySQL不强制执行检查约束。 –

+0

如果您需要检查然后使用MySQL中的触发器 –

+0

在更新进入表格之前,它应该在允许学生注册主题之前检查可用的班级大小。如果该班只有40名学生,则第41名学生不能再插入桌子。 – helloworld1234

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

+0

谢谢,请问“新”字是表名吗? – helloworld1234

+0

'NEW'引用要插入表中的记录。 'NEW.register'是你想要插入的'register'的值。顺便说一句,如果你定义了一个'UPDATE'触发器,然后还使用单词'NEW'来引用你想更新的记录 –

+0

非常感谢,伙计...... – helloworld1234

有点评论。

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

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

Check实际上没有任何引擎实现的,所以这个什么也不做。据推测,因此,它不是constraint语法的一部分,因此不适用于add constraint