MySQL触发器 - 使用从另一个表中选择的值更新表

时间:2010-09-01 11:01:42

标签: mysql triggers mysql-error-1054

我在使用从MySQL Trigger中的另一个表中选择的值更新表中的行时遇到问题。我的触发器看起来像这样

CREATE TRIGGER update_user_last_login
    AFTER INSERT or UPDATE ON last FOR EACH ROW
    BEGIN 
        DECLARE _user_id INTEGER;
        SELECT user_id INTO _user_id FROM user_profile WHERE user_name = NEW.username;
        UPDATE user set last_login = NEW.seconds WHERE id = _user_id;
    END 

我收到错误消息:

ERROR 1054 (42S22): Unknown column '_user_id' in 'where clause'

有人能指出我正确的方向吗?

非常感谢, 米兰。

3 个答案:

答案 0 :(得分:1)

这是复合触发事件(INSERT or UPDATE)的语法错误。尝试:

CREATE TRIGGER update_user_last_login
    AFTER UPDATE ON last FOR EACH ROW ...

我不认为 mysql在同一个触发器中支持复合事件。您可以创建两个触发器,一个用于插入后,另一个用于更新后。这两个触发器可以重复调用相同的代码或调用公共存储过程。

答案 1 :(得分:0)

你可以像这样切出中间变量......

UPDATE user
    SET last_login = NEW.seconds
    WHERE id = (SELECT user_id
                    FROM user_profile
                    WHERE user_name = NEW.username);

答案 2 :(得分:0)

试着吼叫

UPDATE user set last_login = NEW.seconds WHERE id = :_user_id;