トリガーを使用するのは初めてですが、かなり読んだことがあります。私は、従業員と呼ばれるmysqlのテーブルを持っており、従業員に加えられた変更の監査証跡をemployee_changesという別のテーブルに作成したいと考えています。しかし、私は、employees表で変更された列のみの監査項目を作成したいと考えています。たとえば、ユーザーが従業員の給与を変更した場合、従業員のID、変更された列の名前(この場合は給与)、以前の値と新しい値が取得されたemployee_changesに行が作成されます。給与およびユーザーの日付と名前を入力します。変更を加えたユーザーの名前は、レコードがフロントエンドに保存されるときにemployeesテーブルのフィールド(LastUpdatedBy)で常に更新されるため、トリガーが起動するまでに、ユーザー名をLastUpdatedBy列。私はこのコードを思い付くことができたThis PostとThis Postの助けを借りてmysqlでトリガーを作成して、あるテーブルの変更を別のテーブルに保存する
:
DELIMITER //
CREATE TRIGGER emp_update
AFTER INSERT
ON employees FOR EACH ROW
BEGIN
DECLARE col_names CURSOR FOR
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'employees'
ORDER BY ordinal_position;
select FOUND_ROWS() into num_rows;
SET i = 1;
the_loop: LOOP
IF i > num_rows THEN
CLOSE col_names;
LEAVE the_loop;
END IF;
FETCH col_names
INTO col_name;
IF OLD.col_name <> NEW.col_name THEN
INSERT INTO employee_changes (EmployeeNumber, FieldName, OldValue, NewValue, ChangeDate, ChangedBy)
VALUES(OLD.EmployeeNumber, col_name, OLD.col_name, NEW.col_name, NOW(), NEW.LastUpdatedBy);
END IF;
SET i = i + 1;
END LOOP the_loop;
END //
DELIMITER ;
しかし、私はそれを実行すると、何も起こらない、何のトリガーはINFORMATION_SCHEMA.TRIGGERSに作成されません。従業員テーブルを更新すると、employee_changesテーブルで何も起こりません。
私はほとんどそこにいるように感じますが、私は立ち往生しています。
ありがとうございました。
エラーメッセージ(WorkbenchやMySQLクライアントなど)を読むことができる場所でコードを実行してください。あなたのコードにいくつかのエラーがあります(変数宣言、 'insert'トリガで' old'を使う)。 – Solarflare