ホームページ >データベース >mysql チュートリアル >トリガーとビューを使用して MySQL でデータベースの変更を追跡および表示するにはどうすればよいですか?

トリガーとビューを使用して MySQL でデータベースの変更を追跡および表示するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 04:16:11963ブラウズ

How Can I Track and View Database Changes in MySQL Using Triggers and Views?

MySQL を使用したデータベース変更履歴の追跡

多くのデータベース システムでは、レコードに加えられた変更を経時的に追跡する機能が必要です。 MySQL は、これを実現する簡単な手法を提供します。変更を監視する「data」という名前のデータ テーブルについて考えます。

まず、追加の 3 つの列を除き、同じ構造で「data」の履歴テーブルを作成します。

  • アクション: VARCHAR(8) デフォルト'挿入'
  • リビジョン: INT(6) NOT NULL auto_increment
  • dt_datetime: DATETIME NOT NULL デフォルト CURRENT_TIMESTAMP

これらの列には操作が保存されますそれぞれ、(挿入/更新/削除)、シーケンス番号、操作の日付と時刻です。

次に、これらの操作をキャプチャして履歴テーブルにデータを入力するトリガーを作成します。

  • トリガーの挿入後: INSERT INTO data_history (アクション、リビジョン、dt_datetime、...) SELECT 'insert'、NULL、NOW()、... FROM data WHERE ...
  • 更新トリガー後: INSERT INTO data_history (アクション、リビジョン、dt_datetime、...) SELECT 'update'、NULL、NOW()、... FROM データ WHERE ...
  • 前トリガーの削除: INSERT INTO data_history (action,reviation,dt_datetime,...) SELECT 'delete', NULL, NOW(), ... FROM data WHERE ...

Now 、すべてのデータ変更は「data_history」テーブルに記録されます。更新全体にわたる特定の列の変更を表示するには、主キー列とシーケンス列で履歴テーブルをそれ自体に結合できます。

CREATE VIEW data_history_changes AS
SELECT t2.dt_datetime, t2.action, t1.row_id,
IF(t1.a_column = t2.a_column, t1.a_column, t1.a_column || " to " || t2.a_column) AS a_column
FROM data_history AS t1 INNER JOIN data_history AS t2
ON t1.row_id = t2.row_id
WHERE (t1.revision = 1 AND t2.revision = 1) OR t2.revision = t1.revision + 1
ORDER BY t1.row_id ASC, t2.revision ASC

これにより、テーブルに加えられたすべての変更のコンパクトな履歴ビューが提供されます。 「データ」テーブル。

以上がトリガーとビューを使用して MySQL でデータベースの変更を追跡および表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。