2012-03-29 10 views
0

でTHEN文で私は2つのテーブルがあります。IF ... MySQLのトリガー

table A 
id | level_ID | col_m | col_n 

table B 
id | prev_ID | cur_ID 

table Aは、新しい挿入が同様に行われ、アップデートされているアプリケーション層から操作されています。

DELIMITER | 
DROP TRIGGER IF EXISTS trigger_happy| 
CREATE TRIGGER trigger_happy AFTER UPDATE ON table A 
FOR EACH ROW 
    BEGIN 
    IF level_ID!=NEW.level_ID THEN 
    INSERT INTO table B (id, cur_ID, prev_ID) 
    VALUES (OLD.id, NEW.level_ID, OLD.level_ID) 
    END IF; 
END; 
DELIMITER ; 

問題は、私はlevel_ID列に変更があった場合、トリガーだけ火を持っているつもりということです。一方table Bで唯一のトリガーを介したtable Alevel_ID欄に更新した後に挿入された値を持っています。他の列col_mcol_nの更新はトリガを起動しません。

私のトリガーステートメントは、そのまま動作しないため、助けてください。

EDITは

アップデートの列は、アプリケーション・ロジック内の異なる時間に行われます。 level_IDの更新が行われた場合にのみトリガする必要があります。

答えて

0

ソリューションは以下の通りです:

DELIMITER | 
DROP TRIGGER IF EXISTS trigger_happy| 
CREATE TRIGGER trigger_happy AFTER UPDATE ON table A 
FOR EACH ROW 
    BEGIN 
    IF NEW.level_ID!=OLD.level_ID THEN /* edit conditional statement */ 
    INSERT INTO table B (id, cur_ID, prev_ID) 
    VALUES (OLD.id, NEW.level_ID, OLD.level_ID) 
    END IF; 
END; 
| /* add delimiter */ 
DELIMITER ; 

このトリガーは、更新後の列level_IDと火の変化を比較します。 phpmyadminを使用しているので、区切り文字を|に指定する必要がありました。私はデフォルトでそれを残していた;

私はこれが誰かを助けることを望む。

0

非常に単純に、2つの更新プログラムを実行する必要があります。

1回の更新でlevel_ID列にトリガーが必要です。 2番目の更新は、関連するトリガーなしでcol_m列とcol_n列を更新します。私は私のために働くことを発見した

+0

あなたの答えを親切に解説します。編集を参照してください。 – gabeno