MySQL触发器用户声明变量

标签 mysql syntax triggers declare

您好,我正在尝试为 SQL 触发器声明一些用户定义的变量(例如:@var),该触发器对给定订阅者 ID 的选定行中的值求和。但是,我的 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 ;

^这会返回“‘字段列表’中的未知列‘操作’”错误。

Action、share 和viral 都是表subscribers_points 中的列名称,所以我不确定为什么它会返回此错误。

最佳答案

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

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 ;

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

关于MySQL触发器用户声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27258673/

相关文章:

MySQL 同一数据库中多个同名表

mysql - 有没有办法强制 MySQL 执行顺序?

python - 如何在 Python 中将条件与 for 循环结合起来?

mysql - 如何检查哪个数据库列返回数据并处理MySQL触发器

MySql错误: Can't update table in stored function/trigger because it is already used by statement which invoked this stored function/trigger

php - 存储到 MySQL 数据库之前的文本验证

mysql - 查询 MySQL 数据库以获取列值的唯一计数

c++ - 在定义 ClassName 之前采用参数 ClassName * 的 typedef 函数指针?

php - 我想理解这段 PHP 代码(来自 Laravel app.php 配置文件)

mysql - SQL 触发器链接 IF 语句