0

フィールドを持つテーブルがあります:

  1. ID
  2. データ1
  3. データ2

次に、更新後にテーブルの変更をログに書き込むトリガーを設定します。

CREATE TRIGGER `update_data` AFTER UPDATE on `data_table`
FOR EACH ROW
BEGIN
   IF (NEW.data1 != OLD.data1) THEN
       INSERT INTO data_tracking set old_value = OLD.data1, new_value = NEW.data1, field = "data1";
   END IF;
   -- similar for data2
END$$

また、変更を行ったユーザーを data_tracking テーブルに記録したいのですが、このユーザーは、トリガーをトリガーする元の UPDATE の一部ではありません。どのユーザーを記録する必要があるかをトリガーに知らせる方法ですか?

これは、複数の登録ユーザーを持つ PHP ベースの Web サービスであり、Web サイト経由で記録を変更できます - トリガーに追加したいユーザーです。

4

2 に答える 2

1

PHP だけが知っているユーザー名を使用したいので、この情報が PHP でしか利用できない場合、MySql はどのユーザーが変更をトリガーしたかを知ることができません。これは、少なくともすべての更新ステートメントでユーザーを渡す必要があることを意味します。これは、この種のトリガーを必要とするすべてのテーブルにこれを列として追加するか、ユーザー名を追加パラメーターとして取得するストアド プロシージャを介してすべての更新を行うことです。その後、ログと更新を実行できるストアド プロシージャをとにかく使用するため、すべてのトリガーを取り除くことができます。

于 2013-08-29T20:15:17.470 に答える