2017-08-25 5 views
0

編集:この投稿は解決されました。私は愚かな誤りを抱えていた。私の更新クエリは、変化しているフィールドの値を変更していない、トリガーは最初の値の変更をキャッチしていた。ごめんなさい !更新後のトリガーはすべての更新された値を考慮に入れます

更新クエリの更新されたすべてのフィールドを考慮しないトリガーがあります。ここ

は私のトリガー history_transactionですが、私のような更新を実行する場合、私だけの監査 statusの変更やテーブル transac_transaction

CREATE TRIGGER history_transaction 
AFTER UPDATE ON transac_transaction 
FOR EACH ROW 
    BEGIN 
    IF(OLD.status <> NEW.status) THEN 
     INSERT INTO transac_transaction_history(transac_id, author,  old_data, new_data, date_upd) 
    VALUES (OLD.id, OLD.last_author_id_update, OLD.status, NEW.status, NOW()); 
    END IF; 

    IF(OLD.price_asked <> NEW.price_asked) THEN 
     INSERT INTO transac_transaction_history(transac_id, author, old_data, new_data, date_upd) 
    VALUES (OLD.id, OLD.last_author_id_update, OLD.price_asked, NEW.price_asked, NOW()); 
     END IF; 
    END; 
$$ 

price_askedフィールド:

update transac_transaction set price_asked=12.00, status=1 where id=2; 

私は唯一のインサートを持つことになりますprice_asked変更の監査テーブルで、ステータスではありません。

フィールドにループする可能性のあるトリガーに何かがありませんか? 私は、各行が更新されたすべてのフィールドを考慮しないと思う。

ありがとうございました。

答えて

0

私はあなたがNULL値を検討すべきだと思う: あなたはprice_asked

+0

私は、トリガーが他のmariaDBインスタンスとMysql上でうまく動作することを認識しています。たぶんバージョンの問題です...私は調査します...あなたの解決に感謝します – iKonenn

+0

私はmariadb 10.2.3を持っています。 preprodサーバーでは、10.0.29 – iKonenn

0

ため

IF(OLD.status <> NEW.status 
    OR ((OLD.status IS NULL OR NEW.status IS NULL) AND OLD.status IS NOT NULL A NEW.status IS NOT NULL)) 

と同じですべて私のせいに

IF(OLD.status <> NEW.status) 

を・修正を試みることができます。私の更新クエリは、2番目のフィールドに同じ値を保持していた... すべて正常に動作します。

関連する問題