如何触发表并更新同一个表?

时间:2016-08-15 10:31:42

标签: mysql database triggers

我正在做一个触发器,当我更新表时,同一个表更新了一个字段。 触发器是:

CREATE TRIGGER update_user
AFTER UPDATE
ON users
FOR EACH ROW
BEGIN
    IF (NEW.totalPoints > 0 AND NEW.totalPoints < 200)  
    THEN
        updateUser("rank 1", NEW.ID);  
    ELSEIF (NEW.totalPoints > 200 AND NEW.totalPoints < 400)  
    THEN
        updateUser("rank 2", NEW.ID);
    END IF;
END;

,程序是:

CREATE PROCEDURE updateUser(newRank VARCHAR(100), IDUser INT)
BEGIN
  UPDATE users SET rank = newRank WHERE ID = IDUser;
END;

我遇到的错误是创建程序时:

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第3行的''附近使用正确的语法

感谢您的帮助!!

2 个答案:

答案 0 :(得分:0)

使用BEFORE更新触发器。但是,您无法真正将此过程用于此目的:

CREATE TRIGGER update_user BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
    IF (NEW.totalPoints > 0 AND NEW.totalPoints < 200)  
    THEN
        SET NEW.rank = 'rank 1';
    ELSEIF (NEW.totalPoints > 200 AND NEW.totalPoints < 400)  
    THEN
        SET NEW.rank = 'rank 2';
    END IF;
END;

修改数据的存储过程将难以在触发器中使用。

编辑:

如果您将其表达为:

SET NEW.RANK = (CASE WHEN NEW.totalPoints > 0 AND NEW.totalPoints < 200
                     THEN 'rank 1'
                     WHEN NEW.totalPoints > 200 AND NEW.totalPoints < 400
                     THEN 'rank 2'
                     ELSE NEW.RANK
                END);

根本没有IF逻辑。

答案 1 :(得分:0)

让我们尝试使用分隔符

-C