Heim >Datenbank >MySQL-Tutorial >Wie kann ich Datenbankänderungen in MySQL mithilfe von Triggern und Ansichten verfolgen und anzeigen?

Wie kann ich Datenbankänderungen in MySQL mithilfe von Triggern und Ansichten verfolgen und anzeigen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-07 04:16:11964Durchsuche

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

Verfolgen des Verlaufs von Datenbankänderungen mit MySQL

Viele Datenbanksysteme erfordern die Möglichkeit, Änderungen an Datensätzen im Laufe der Zeit zu verfolgen. MySQL bietet eine unkomplizierte Technik, um dies zu erreichen. Stellen Sie sich eine Datentabelle namens „data“ vor, die Sie auf Änderungen überwachen möchten.

Erstellen Sie zunächst eine Verlaufstabelle für „data“ mit derselben Struktur, mit Ausnahme von drei zusätzlichen Spalten:

  • Aktion: VARCHAR(8) Standard 'einfügen'
  • Revision: INT(6) NOT NULL auto_increment
  • dt_datetime: DATETIME NOT NULL default CURRENT_TIMESTAMP

Diese Spalten speichern den Vorgang (Einfügen/Aktualisieren/Löschen) und die Sequenznummer , sowie das Datum und die Uhrzeit des Vorgangs.

Als nächstes erstellen Trigger, um diese Vorgänge zu erfassen und die Verlaufstabelle zu füllen:

  • Nach dem Einfüge-Trigger: INSERT INTO data_history (Aktion, Revision, dt_datetime, ...) SELECT 'insert', NULL , NOW(), ... FROM data WHERE ...
  • Nach Update-Trigger: INSERT INTO data_history (Aktion, Revision, dt_datetime, ...) SELECT 'update', NULL, NOW(), ... FROM data WHERE ...
  • Vor dem Löschauslöser: INSERT INTO data_history (Aktion, Revision, dt_datetime, ...) SELECT 'delete', NULL, NOW(), ... FROM data WHERE ...

Jetzt werden alle Datenänderungen in der Tabelle „data_history“ aufgezeichnet. Um die Änderungen für eine bestimmte Spalte über Aktualisierungen hinweg anzuzeigen, können Sie die Verlaufstabelle in den Primärschlüssel- und Sequenzspalten mit sich selbst verknüpfen:

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

Dies sollte eine kompakte und historische Ansicht aller an der vorgenommenen Änderungen bieten Tabelle „Daten“.

Das obige ist der detaillierte Inhalt vonWie kann ich Datenbankänderungen in MySQL mithilfe von Triggern und Ansichten verfolgen und anzeigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn