MySQL は私の得意分野ではないので、助けが必要です。どんな助けでもありがたいです。
私のサイトでは、UPDATE
または が欠損値で実行されたという問題が発生しています。これにより、サイト上の他の機能でいくつかの問題が発生しましたが、どのクラスでもまたは が実行された場所をINSERT
見つけることができません。UPDATE
INSERT
UPDATE
これらのテーブルに追加して、 または の元のクエリまたは完全なクエリを保存できるような、MySQL トリガーなどの方法はありますか。INSERT
ログ記録を試みましたが、データベース全体に適用され、ディスク領域を大量に消費してしまいます。
ご返信をいただければ幸いです。
PS: 現時点では、まだ開発段階にあるため、PHP クラスは少し乱雑です。そのため、更新または挿入関数に例外を追加すると時間がかかりすぎます。したがって、質問に対する回答に焦点を絞ってください。再度、ありがとうございます。
ベストアンサー1
次のステートメントを使用して、現在の SQL クエリを文字列として取得できます。
SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID()
TRIGGER
そこで、テーブルへの挿入や更新操作時に実行されるを作成し、(私)現在のSQL文を取得し、(ii)次のように別のテーブルに挿入します。
DELIMITER |
CREATE TRIGGER log_queries_insert BEFORE INSERT ON `your_table`
FOR EACH ROW
BEGIN
DECLARE original_query VARCHAR(1024);
SET original_query = (SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID());
INSERT INTO `app_sql_debug_log`(`query`) VALUES (original_query);
END;
|
DELIMITER ;
2つのトリガーを作成する必要があります。1つは更新用、もう1つは挿入用です。トリガーは新しいクエリを文字列として挿入します。app_sql_debug_log
テーブル内のquery
カラム。