mysql 触发器中的 IF 语句触发错误
IF Statement firing error in mysql trigger
我正在执行此语句以使用 phpMyAdmin
在 table 上创建触发器
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 个错误。
Unrecognized statement type. (near "IF" at position 253)
Unrecognized statement type. (near "IF" at position 372)
Unrecognized statement type. (near "IF" at position 505)
Unrecognized statement type. (near "END" at position 643)
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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NEW TRIGGER credit_refs AFTER UPDATE on investments FOR EACH ROW
BEGIN
DECL' at line 1
希望这里有人能够告诉我我在这里做错了什么。
IF 周围的警告只是 phpmyadmin 自己的检查。您得到的语法错误是由不需要的 NEW
关键字引起的。根据 MySQL manual on creating triggers:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
但是,您的 IF 未被 END IF
关闭,并且您在 declare
语句末尾也缺少分号。
DELIMITER $$
CREATE 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);
END IF;
IF(parent != 0) THEN
INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (parent,OLD.inv,'ref_pa',OLD.tid);
END IF;
IF(suparent != 0) THEN
INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (suparent,OLD.inv,'ref_supa',OLD.tid);
END IF;
END;
$$
DELIMITER ;
尝试上面的查询。
在MySQL中每个IF
语句必须有END IF
。你错过了END IF
对于多个 if 语句。
我正在执行此语句以使用 phpMyAdmin
在 table 上创建触发器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 个错误。
Unrecognized statement type. (near "IF" at position 253)
Unrecognized statement type. (near "IF" at position 372)
Unrecognized statement type. (near "IF" at position 505)
Unrecognized statement type. (near "END" at position 643)
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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NEW TRIGGER credit_refs AFTER UPDATE on investments FOR EACH ROW
BEGIN
DECL' at line 1
希望这里有人能够告诉我我在这里做错了什么。
IF 周围的警告只是 phpmyadmin 自己的检查。您得到的语法错误是由不需要的 NEW
关键字引起的。根据 MySQL manual on creating triggers:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
但是,您的 IF 未被 END IF
关闭,并且您在 declare
语句末尾也缺少分号。
DELIMITER $$
CREATE 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);
END IF;
IF(parent != 0) THEN
INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (parent,OLD.inv,'ref_pa',OLD.tid);
END IF;
IF(suparent != 0) THEN
INSERT INTO earnings (`tid`,`amount`,`type`,`ref_tid`) VALUES (suparent,OLD.inv,'ref_supa',OLD.tid);
END IF;
END;
$$
DELIMITER ;
尝试上面的查询。
在MySQL中每个IF
语句必须有END IF
。你错过了END IF
对于多个 if 语句。