我建议的触发器:
#START TRIGGER
delimiter //
DECLARE msg VARCHAR(255);
CREATE TRIGGER passStandard_check BEFORE INSERT ON Module
FOR EACH ROW
BEGIN
IF NEW.passStandard < 0 || NEW.passStandard > 1 THEN
set msg = concat('Trigger Error: Pass Standard: ', cast(NEW.passStandard as char));
signal sqlstate '45000' set message_text = msg;
END
//
delimiter ;
#END TRIGGER
但是我收到以下错误:
错误代码:1064 . 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'DECLARE msg VARCHAR(255)附近使用正确的语法;在第1行插入Mod'之前创建TRIGGER passStandard_check
添加 END IF
没有任何区别 .
passStandard
设置为 INT NOT NULL
.
编辑
我在 BEGIN
之后移动了 DECLARE
语句:
#START TRIGGER
delimiter //
CREATE TRIGGER passStandard_check BEFORE INSERT ON Module
FOR EACH ROW
BEGIN
DECLARE msg VARCHAR(255);
IF NEW.passStandard < 0 || NEW.passStandard > 1 THEN
set msg = concat('Trigger Error: Pass Standard: ', cast(NEW.passStandard as char));
signal sqlstate '45000' set message_text = msg;
END IF;
END
//
delimiter ;
#END TRIGGER
但我仍然得到这个错误:
错误代码:1064 . 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'sqlstate'45000'set message_text = msg附近使用正确的语法;万一;在第7行结束
5 回答
您需要在过程中声明变量“msg”并使用END IF
我注意到,如果我没有在IF语句中添加括号,在添加带有IF / ELSE逻辑的触发器时,我会收到MySQL警告 . 不知道为什么,但我添加了括号,警告消失了 . 尝试类似的东西:
尝试将其分解为多个查询 . 或者在phpmyadmin中运行它,它处理半冒号分隔的多查询 .
可能是这样的:
http://dev.mysql.com/doc/refman/5.0/en/declare.html
我搞定了 . 请在工作代码下方找到 .