我在使用从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'
有人能指出我正确的方向吗?
非常感谢, 米兰。
答案 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;