Maison >base de données >tutoriel mysql >Comment puis-je suivre et afficher les modifications de la base de données dans MySQL à l'aide de déclencheurs et de vues ?

Comment puis-je suivre et afficher les modifications de la base de données dans MySQL à l'aide de déclencheurs et de vues ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 04:16:11964parcourir

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

Suivi de l'historique des modifications apportées à la base de données avec MySQL

De nombreux systèmes de bases de données nécessitent la possibilité de suivre les modifications apportées aux enregistrements au fil du temps. MySQL propose une technique simple pour y parvenir. Considérez une table de données nommée « données » dont vous souhaitez surveiller les modifications.

Pour commencer, créez une table d'historique pour les « données » avec la même structure, à l'exception de trois colonnes supplémentaires :

  • action : VARCHAR(8) par défaut 'insérer'
  • révision : INT(6) NOT NULL auto_increment
  • dt_datetime: DATETIME NOT NULL par défaut CURRENT_TIMESTAMP

Ces colonnes stockent l'opération (insertion/mise à jour/suppression), le numéro de séquence , ainsi que la date et l'heure de l'opération, respectivement.

Ensuite, créer des déclencheurs pour capturer ces opérations et remplir la table d'historique :

  • Après l'insertion du déclencheur : INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'insert', NULL, NOW(), ... FROM data WHERE ...
  • Après le déclencheur de mise à jour : INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'update', NULL, NOW(), ... FROM data WHERE ...
  • Avant de supprimer le déclencheur : INSERT INTO data_history (action, révision, dt_datetime, ...) SELECT 'delete', NULL, NOW(), ... FROM data WHERE ...

Désormais, toutes les modifications de données seront enregistrées dans la table "data_history". Pour afficher les modifications d'une colonne spécifique au fil des mises à jour, vous pouvez joindre la table d'historique à elle-même sur les colonnes de clé primaire et de séquence :

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

Cela devrait fournir une vue compacte et historique de toutes les modifications apportées au tableau "données".

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn