0

ここで、データベースの変更をログに記録するタスクがあります。

それで、トリガーについて読んだばかりで、それを試してみたいと思いました。

顧客情報が記載されているデータベースにこのテーブルを取得しました。

(id fornamn、efternam などは列名で、その下の情報は値です)

このテーブルは「kunder」と呼ばれます

id  fornamn     efternamn   adress  ort     postnummer  foretag     telefon         email           personNmr   husNmr  organisationsNmr    produkt     uppringd    prioritet   raderad
15  Peter       Tressing    adress  ort     41676       foretag     071234565       email@email.se  123456      4       55658794            Nocria      1           0           0

このテーブルを kunder_log と呼びました

id  fornamn     efternamn   adress  ort     postnummer  foretag     telefon         email           personNmr   husNmr  organisationsNmr    produkt     uppringd    prioritet   raderad     timestamp   type

(唯一の違いは、ID の主キーではなくインデックスであり、タイムスタンプとタイプを追加しました)

(クエリのタイプ (挿入、削除、または更新) を入力します)

更新/挿入/削除クエリを実行するときに、テーブルの各行の変更をトリガーしたいと考えています。

しかし、古いテーブルのすべての列ではなく、変更を挿入したいだけです。

これは可能ですか、それとも別のアプローチをお勧めしますか?

4

1 に答える 1

0

基本的に、メイン テーブルで行われたすべての変更をログに記録するには、次の 2 つの方法があります。

  1. テーブルに加えられたすべての変更をグローバルにログに記録する場合は、トリガーが適切なオプションです。

  2. すべてのストアド プロシージャのすべての挿入、更新、削除ステートメントの後に、変更ログ テーブルに挿入を書き込みます。

トリガーと比較してはるかに高速であるため、私は通常、2 番目のアプローチを好みます。

テーブル構造の例:

kunder
    all_columns

kunder_log
    change_log_id INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
    all_columns
    change_type ENUM('INSERT','UPDATE','DELETE'),
    change_time TIMESTAMP NOT NULL DEFAULT 0,
    change_description VARCHAR(1024)
于 2012-07-30T09:38:44.227 に答える