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);
- 寄存器属性应该不大于classSize属性和更小于0
- 可用的属性应该不大于classSize attribte且小于0。
当我在此语法键入更多在MySql Workbench中,它投诉“Syntax Error:unexpected'CHECK'(check)'。我应该如何添加这些,使用TRIGGER?
谢谢
由于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定义相同的触发器。
谢谢,请问“新”字是表名吗? – helloworld1234
'NEW'引用要插入表中的记录。 'NEW.register'是你想要插入的'register'的值。顺便说一句,如果你定义了一个'UPDATE'触发器,然后还使用单词'NEW'来引用你想更新的记录 –
非常感谢,伙计...... – helloworld1234
有点评论。
MySQL的支持check
语法,但在create table
:
create table (
. . .
CHECK (register <= classSize AND register >= 0)
);
Check
实际上没有任何引擎实现的,所以这个什么也不做。据推测,因此,它不是constraint
语法的一部分,因此不适用于add constraint
。
为什么要麻烦? MySQL不强制执行检查约束。 –
如果您需要检查然后使用MySQL中的触发器 –
在更新进入表格之前,它应该在允许学生注册主题之前检查可用的班级大小。如果该班只有40名学生,则第41名学生不能再插入桌子。 – helloworld1234