我建议的触发器:
#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
。
我在DECLARE
:
BEGIN
语句
#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行结束
答案 0 :(得分:2)
您需要在程序中声明变量“msg”并使用END IF
#START TRIGGER
delimiter //
CREATE TRIGGER passStandard_check BEFORE INSERT ON Module
FOR EACH ROW
BEGIN
DECLARE msg VARCHAR(255); /* << PUT THIS HERE */
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; /* << YOU WILL NEED THIS TOO (DONT FORGET THE SEMICOLON :D) */
END//
delimiter ;
#END TRIGGER
答案 1 :(得分:1)
如果我没有在IF语句中添加括号,我注意到在添加带有IF / ELSE逻辑的触发器时我收到了MySQL警告。不知道为什么,但我添加了括号,警告消失了。尝试类似:
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;
答案 2 :(得分:0)
尝试将其分解为多个查询。或者在phpmyadmin中运行它,它处理半冒号分隔的多查询。
答案 3 :(得分:0)
可能是这样的:
DECLARE只允许在BEGIN ... END复合语句中使用,并且必须在任何其他语句之前的开头。
答案 4 :(得分:0)
我得到了它的工作。请在工作代码下方找到。
delimiter //
CREATE TRIGGER test_check1 BEFORE INSERT ON employee
FOR EACH ROW
BEGIN
DECLARE msg VARCHAR(255);
IF (NEW.sync_id = '0') THEN
SET NEW.name = 'Collect Money';
signal sqlstate '45000' set message_text = msg;
END IF;
END//
delimiter ;