2016-04-23 23 views
0

私は、トリガーを操作するために何か別のシナリオを持っています。更新トリガーを実行した後、前のレコードを取得する方法は?

メインテーブルで実際に更新する前にログテーブルにレコードを挿入します。しかし、私はそれを違ってやりたい。

本当にメインテーブルで更新が発生したときにログテーブルにレコードを追加するだけで、MySQL Triggerを使用してそれを実行したいのです。

ここでスクリーンショットを添付しています。

enter image description here

I名前= ABCDのID = 1を更新する場合、それは最初のテーブルを記録するためにそれを追加し、列の前の状態を読み出します。

enter image description here

私が確認したいことはそれだけで、実際の更新がmain_tableてしまったときに、テーブルをmain_table_logするために追加することにMySQLのトリガを使用しています。 main_tableに更新がない場合、main_table_logテーブルにレコードを追加すべきではありません。

誰でも助けてもらえますか?私はそれはできるとは思いますが、それをやる方法がないと思いますか?

もちろん、私はPHPを前面に使用しています。

答えて

1

トリガーで古い値と新しい値が異なるかどうかをテストできます。

CREATE TRIGGER log_trigger 
AFTER UPDATE ON main_table 
FOR EACH ROW 
    IF OLD.name != NEW.name OR OLD.num != NEW.num 
    THEN 
     INSERT INTO main_table_log (id, name, num) VALUES (OLD.id, OLD.name, OLD.num) 
    END IF 
+0

すばやくご回答いただきありがとうございます。代わりに、OLDレコードが実際に更新されているかどうか、各フィールドをチェックすることができますか?私は各テーブルに約10-15のフィールドを持っているからです。 – NullPointer

+0

タイムスタンプの列に 'ON UPDATE CURRENT_TIMESTAMP'がありますか?次に、他の列が更新されていなければ更新されないので、その列をチェックするだけです。 http://stackoverflow.com/questions/6296313/mysql-trigger-after-update-only-if-row-has-changed – Barmar

+0

私があなたが提供したリンクを見ています。最初に関連する質問を見つけようとしましたが、見つかりませんでした。 – NullPointer

関連する問題