MySQL触发器用户声明变量

时间:2014-12-02 20:49:11

标签: mysql syntax triggers declare

您好我正在尝试为SQL触发器声明一些用户定义的变量(EX:@var),该触发器对给定subscriberID的所选行中的值求和。但是,我在DECLARE语句中收到语法错误。

这是我的代码:

    DELIMITER //
    CREATE TRIGGER trg_subscribers_points

    AFTER UPDATE ON subscribers_points FOR EACH ROW
    BEGIN

    DECLARE @Sub_ID bigint, @Col1 bigint, @Col2 bigint, @Col3 bigint

    (select @Sub_ID = subscriber_id, @Col1 = action, @Col2 = share, @Col3 = viral FROM subscribers_points)

    update subscribers_points set total_points = @Col1 + @Col2 + @Col3 where subscriber_id = @Sub_ID

    END//

DELIMITER ;

么?提前谢谢。

更新代码:

DELIMITER //

CREATE TRIGGER trg_subscribers_points

BEFORE UPDATE 
ON subscribers_points 
FOR EACH ROW

BEGIN

SET NEW.total_points = (action + share + viral);

END//
DELIMITER ;

^这会在'字段列表'中返回“未知列'操作'”错误。

动作,分享和病毒是表subscriber_points中的所有列名,所以我不确定它为什么会返回此错误。

1 个答案:

答案 0 :(得分:1)

我不确定您的错误是什么,但您不需要为此目的使用变量。你有几个问题。首先,您不应在更新后再次更新该行。而且,您的触发器实际上并不是指要更改的数据。我怀疑你想要这样的东西:

DELIMITER //
CREATE TRIGGER trg_subscribers_points
BEFORE UPDATE ON subscribers_points FOR EACH ROW
BEGIN
    set new.total_points = (new.action + new.share + new.viral)
END//

DELIMITER ;

请注意,触发器已更改为“更新前”触发器。