【发布时间】:2017-07-11 09:57:10
【问题描述】:
我正在执行此语句以使用 phpMyAdmin 在表上创建触发器
DELIMITER //
CREATE NEW TRIGGER credit_refs AFTER UPDATE on investments FOR EACH ROW
BEGIN
DECLARE ref INT(20)
DECLARE parent INT(20)
DECLARE suparent INT(20)
SELECT ref,ref_pa,ref_supa INTO ref,parent,suparent FROM users WHERE tid = OLD.tid;
IF(ref != 0) THEN
INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (ref,OLD.inv,'ref',OLD.tid);
IF(parent != 0) THEN
INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (parent,OLD.inv,'ref_pa',OLD.tid);
IF(suparent != 0) THEN
INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (suparent,OLD.inv,'ref_supa',OLD.tid);
END //
DELIMITER ;
这句话在我看来没问题,但是我收到以下问候
错误
静态分析:
在分析过程中发现了 4 个错误。
无法识别的语句类型。 (靠近位置 253 的“IF”)
无法识别的语句类型。 (靠近位置 372 的“IF”)
无法识别的语句类型。 (靠近位置 505 的“IF”)
无法识别的语句类型。 (靠近位置 643 的“END”)
SQL 查询:文档
CREATE NEW TRIGGER credit_refs AFTER UPDATE on investments FOR EACH ROW BEGIN DECLARE ref INT(20) DECLARE parent INT(20) DECLARE suparent INT(20) SELECT ref,ref_pa,ref_supa INTO ref,parent,suparent FROM users WHERE tid = OLD.tid; IF(ref != 0) THEN INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (ref,OLD.inv,'ref',OLD.tid); IF(parent != 0) THEN INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (parent,OLD.inv,'ref_pa',OLD.tid); IF(suparent != 0) THEN INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (suparent,OLD.inv,'ref_supa',OLD.tid); END
MySQL 说:文档
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在“NEW TRIGGER credit_refs AFTER UPDATE on investment FOR EACH ROW
附近使用正确的语法
BEGIN
DECL' at line 1
希望这里有人能够告诉我我在这里做错了什么。
【问题讨论】:
-
我对mysql不太熟悉——但是你不需要在开头用@命名你声明的变量吗?
-
我定义了用相同标准编写的触发器,所以没有。
-
@EstebanP。那是 ms sql 语法,而不是 MySQL。在 MySQL 中,以 @ 开头的变量是会话变量,其作用域和角色与触发器或任何其他存储例程中定义的变量完全不同。
标签: mysql sql syntax triggers declare