带有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);