首页 > 解决方案 > 我正在尝试创建一个 mysql 触发器,但不能,不知道错误是什么

问题描述

这是触发查询

    DELIMITER $$
CREATE TRIGGER adjust_ref_token
AFTER INSERT
    ON transactions FOR EACH ROW
DECLARE token_ref integer;

SELECT ico_stages.sales_token INTO @token_ref WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;

IF NEW.tnx_type = 'referral' THEN
    UPDATE ico_stages SET ico_stages.sales_token = (@token_ref - NEW.tokens) WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
END IF;
END $$

错误显示是

    CREATE TRIGGER adjust_ref_token
AFTER INSERT
    ON transactions FOR EACH ROW
DECLARE token_ref integer;

SELECT ico_stages.sales_token INTO @token_ref WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;

IF NEW.tnx_type = 'referral' THEN
    UPDATE ico_stages SET ico_stages.sales_token = (@token_ref - NEW.tokens) WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;
END IF;
END

MySQL 说:文档

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'DECLARE token_ref integer; 附近使用的正确语法;

在第 4 行选择 ico_stages.sales_token INTO @token_ref WHER'

谁能告诉我错误是什么?

标签: mysqldatabase-trigger

解决方案


DELIMITER $$
CREATE TRIGGER adjust_ref_token AFTER INSERT ON transactions
FOR EACH ROW 
BEGIN
    DECLARE token_ref integer;

    SELECT ico_stages.sales_token INTO @token_ref WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date;

    IF NEW.tnx_type = 'referral' THEN 
        UPDATE ico_stages SET ico_stages.sales_token = (@token_ref - NEW.tokens) WHERE ico_stages.start_date <= NOW() <= ico_stages.end_date; 
    END IF;
END; $$
DELIMITER ;

基本上,如果要在触发器中执行多个语句,则必须使用BEGIN...END构造。有关更多详细信息https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html


推荐阅读