Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL触发器定义-1064错误_Mysql_Triggers_Mysql Error 1064 - Fatal编程技术网

MySQL触发器定义-1064错误

MySQL触发器定义-1064错误,mysql,triggers,mysql-error-1064,Mysql,Triggers,Mysql Error 1064,我提议的触发因素: #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:

我提议的触发因素:

#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服务器版本对应的手册,了解在“sqlstate”45000“set message_text=msg”附近使用的正确语法;如果结束;在第7行结束


您需要在过程中声明变量“msg”,并在必要时使用END

#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
#启动触发器
分隔符//
在插入模块之前创建触发器密码标准检查
每行
开始
声明msg VARCHAR(255);/*1那么
设置msg=concat('Trigger Error:Pass Standard:',cast(NEW.passStandard as char));
信号sqlstate“45000”设置消息\u text=msg;

如果结束;/* 尝试将其分解为几个查询。或者在phpmyadmin中运行它,它处理分号分隔的多个查询。

可能是这样的:

仅允许在BEGIN中声明。。。结束复合语句,并且必须在其开始处,在任何其他语句之前


我注意到,如果我没有在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;
如果((NEW.passStandard<0)| |(NEW.passStandard>1)),则
设置msg=concat('Trigger Error:Pass Standard:',cast(NEW.passStandard as char));
信号sqlstate“45000”设置消息\u text=msg;
如果结束;

我让它工作了。请找到下面的工作代码

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 ;

不,不是那样的。(另外,请参见@clime的答案)您缺少“如果结束”后面的分号,不,哈哈。我已经添加了分号并更新了问题中的错误(虽然是相同的错误)不,不是那样的。或者至少,不仅仅是这样。请参见编辑
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 ;