1

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

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'

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

非常感谢你,米兰。

4

3 回答 3

1

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

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

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

于 2010-09-01T13:16:22.220 回答
0

你可以像这样剪掉中间变量......

UPDATE user
    SET last_login = NEW.seconds
    WHERE id = (SELECT user_id
                    FROM user_profile
                    WHERE user_name = NEW.username);
于 2010-09-01T11:35:11.287 回答
0

尝试如下

UPDATE user set last_login = NEW.seconds WHERE id = :_user_id;
于 2016-10-07T11:05:14.010 回答