带有if语句的MYSQL触发器
我好像没办法让这个扳机动起来带有if语句的MYSQL触发器,mysql,Mysql,我好像没办法让这个扳机动起来 CREATE TRIGGER class_check BEFORE INSERT ON Category DECLARE x VARCHAR(1); SET x = (SELECT Type1 FROM Category); IF (x<>'A') THEN CALL `'ERROR'`; END IF; IF (NEW.MxLen > 3 AND x ='M') THEN CALL `'ERROR LENGTH MUST BE L
CREATE TRIGGER class_check BEFORE INSERT ON Category
DECLARE x VARCHAR(1);
SET x = (SELECT Type1 FROM Category);
IF (x<>'A') THEN
CALL `'ERROR'`;
END IF;
IF (NEW.MxLen > 3 AND x ='M') THEN
CALL `'ERROR LENGTH MUST BE LESS THAN 3 FOR M CLASS LICENSE'`;
ELSEIF (NEW.MxLen > 5 AND x ='G') THEN
CALL `'ERROR LENGTH MUST BE LESS THAN 5 FOR G CLASS LICENSE'`;
ELSEIF (NEW.MxLen > 30) THEN
CALL `'ERROR LENGTH MUST BE LESS THAN 30 FOR A,B,C,D,E CLASS LICENSE'`;
END IF;
上面的触发器没有按我希望的方式工作,我似乎找不到问题所在。
基本上,我想让它检查Category表中的type1是否不是A,然后抛出一个错误。每次我尝试添加一个,它仍然会抛出错误。
任何帮助都将不胜感激。更新前我也有相同的标记。反勾号转义了它们之间的名称,表示这是一个标识符。我怀疑你是否真的有这些名字的标识符。只需对字符串使用单引号: 通常,调用后面会有存储过程名。我猜您确实希望信号引发错误:
CREATE TRIGGER class_check BEFORE INSERT ON Category
DECLARE x VARCHAR(1);
SET x = (SELECT Type1 FROM Category);
IF (x <> 'A') THEN
SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR';
END IF;
IF (NEW.MxLen > 3 AND x ='M') THEN
SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR LENGTH MUST BE LESS THAN 3 FOR M CLASS LICENSE';
ELSEIF (NEW.MxLen > 5 AND x ='G') THEN
SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR LENGTH MUST BE LESS THAN 5 FOR G CLASS LICENSE';
ELSEIF (NEW.MxLen > 30) THEN
SIGNAL '45000' SET MESSAGE_TEXT = 'ERROR LENGTH MUST BE LESS THAN 30 FOR A,B,C,D,E CLASS LICENSE';
END IF;
如果类别中有多行,则可能返回错误。您会收到哪条错误消息?对于A、B、C、D、E类许可证,可能错误长度必须小于30?我得到第一个错误“ERROR”
SET x = (SELECT Type1 FROM Category);