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 语句。