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 が同じトリガーでの複合イベントをサポートしているとは思わない。1 つは挿入後用、もう 1 つは更新後用の 2 つのトリガーを作成できます。これら 2 つのトリガーは、同じコードを重複して呼び出すか、共通のストアド プロシージャを呼び出すことができます。

于 2010-09-01T13:16:22.220 に答える
0

以下のようにしてみてください

UPDATE user set last_login = NEW.seconds WHERE id = :_user_id;
于 2016-10-07T11:05:14.010 に答える
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 に答える