MySQL Trigger - обновить таблицу со значением, выбранным из другой таблицы

У меня проблемы с обновлением строки в таблице со значением, выбранным из другой таблицы в триггере 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'

Может ли кто-нибудь указать мне правильное направление, пожалуйста?

Большое спасибо, Милан.


person Milan    schedule 01.09.2010    source источник
comment
Это старье, но на всякий случай, если кто-то еще столкнется с этим. В MySQL, если вы ссылаетесь на то, что выглядит как переменная, не окружая ее '', mysql будет рассматривать ее как столбец.   -  person ppetree    schedule 19.04.2013


Ответы (3)


Это синтаксическая ошибка в событии составного триггера (INSERT or UPDATE). Пытаться:

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

Я думаю, что mysql не поддерживает составные события в одном и том же триггере. Вы можете создать два триггера: один для вставки и один для обновления. Эти два триггера могут вызывать один и тот же код в двух экземплярах или вызывать общую хранимую процедуру.

person zevra0    schedule 01.09.2010

Вы можете вырезать промежуточную переменную вот так...

UPDATE user
    SET last_login = NEW.seconds
    WHERE id = (SELECT user_id
                    FROM user_profile
                    WHERE user_name = NEW.username);
person Brian Hooper    schedule 01.09.2010

Попробуйте, как показано ниже

UPDATE user set last_login = NEW.seconds WHERE id = :_user_id;
person Radhakanta Ghosh    schedule 07.10.2016
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. - person J. Chomel; 07.10.2016