2010-12-29 5 views
1

テーブルにすべての変更を保存したいと思います(MySQL版)。 1つのテーブル内のすべてのテーブルのすべての変更を追跡するためにテーブル '監査'を作成しました(したがって、各テーブルの監査テーブルを作成する必要はありません)。Mysqlトリガー:OLDとNEWを文字列/ xml /パラメーターとして使用しますか?

次に、各テーブルと監査テーブルにレコードを挿入するストアドプロシージャのトリガを作成しました。ストアドプロシージャのパラメータはtablenameとプライマリIDです。これで、データベースの各レコードの挿入/更新/削除の日付を追跡できます。

しかし、この手順でDATAのすべての変更をトレースしたいと思います。このためには、ストアドプロシージャのトリガからOLDとNEWレコードを使用する方法を見つける必要があります。

誰でもこの方法を知っていますか? レコードOLDとNEWを文字列にシリアライズするのは何ですか?

+0

通常の引数のように、値を処理に渡すことはできませんか? – DrColossos

+0

私はすべてのテーブルに対して異なるストアドプロシージャを書く必要がありますが、一部のテーブルには50を超えるカラムがあります。私は監査ログに1つのテーブルしか使用しないので、OLDとNEWをパラメータとして渡すことができればいいと思っていました....しかし、私が見る限り、これは不可能です... – Dylan

答えて

0

唯一の解決策は、テーブル内のすべてのフィールドのOLD & NEW値をチェックすることでした。

BEGIN 

-- record changes to table log_new 

IF OLD.fieldA != NEW.fieldA 
OR OLD.fieldB != NEW.fieldB 
THEN 

INSERT INTO log_new (
関連する問題