2017-07-19 3 views
0
DELIMITER $$ 

CREATE TRIGGER ad_user AFTER DELETE 

ON `user` 
FOR EACH ROW BEGIN 
    DECLARE max_id INT; 
    DECLARE new_id INT; 

    SELECT MAX(`id`) INTO max_id FROM `user`; 
    IF max_id = NULL THEN 
     SET max_id = 0; 
    END IF 

    SELECT `new_id` INTO new_id FROM `conf` WHERE `table` = 'user'; 

    IF max_id < new_id THEN 
     UPDATE `conf` SET `new_id` = max_id WHERE `table` = 'user'; 
    END IF 
END$$ 

私はエラープロンプト次しまっ:この単純なMySQLトリガーの構文に何が問題なのですか?私は、このトリガーを作成するときに

エラーコード:1064あなたは、あなたのSQL構文でエラーが発生しています。 「NEW_ID INTO NEW_ID SELECTのconf FROMテーブル= 『事実』の近くに使用する権利 構文についてはMySQLサーバのバージョンに対応 マニュアルを確認してください。 IF max_id < new_id THEN '12行目

誰でも手伝ってもらえますか?前もって感謝します!

+0

列と変数名は同じである - 他のSGに変数名を変更してみてください。 – Shadow

答えて

3

は、このようなクエリを書いてみます

DELIMITER $$ 

CREATE TRIGGER ad_user AFTER DELETE 
ON `user` 
FOR EACH ROW BEGIN 
    DECLARE v_max_id INT; 
    DECLARE v_new_id INT; 

    SELECT MAX(`id`) INTO v_max_id FROM `user`; 
    IF v_max_id IS NULL THEN 
     SET v_max_id = 0; 
    END IF; 

    SELECT `new_id` INTO v_new_id FROM `conf` WHERE `table` = 'user'; 

    IF v_max_id < v_new_id THEN 
     UPDATE conf c 
      SET c.new_id = v_max_id 
      WHERE c.`table` = 'user'; 
    END IF; 
END$$ 

これは主にセミコロンを追加し、= NULLを修正します。

+0

あなたの非常に迅速な答えをありがとう!はい、あなたは2つの間違いを非常に正確に指摘しました。私の問題は解決されました。そして、私はあなたの命名規則を採用し、ローカル変数の前に 'v_'を追加します。どうもありがとうございました! – Benson

関連する問題