Maison >base de données >tutoriel mysql >Comment supprimer automatiquement les lignes de plus de 7 jours dans MySQL ?

Comment supprimer automatiquement les lignes de plus de 7 jours dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-07 00:42:11934parcourir

How to Automatically Delete Rows Older Than 7 Days in MySQL?

Suppression automatique des lignes datant de plus de 7 jours dans MySQL

Introduction

Les bases de données accumulent souvent des données obsolètes au fil du temps, ce qui entraîne des tables gonflées et des problèmes de performances. Pour gérer efficacement ces données, MySQL offre la possibilité de créer des procédures stockées qui automatisent les tâches de nettoyage.

Création d'une procédure stockée pour supprimer les anciennes données

La procédure stockée suivante supprimera automatiquement les lignes de plus de 7 ans. jours de toutes les tables d'une base de données :

DELIMITER $$

CREATE PROCEDURE delete_old_data()
BEGIN
  DECLARE tb_name VARCHAR(255);
  DECLARE max_date DATE;
  
  SET max_date = DATE_SUB(NOW(), INTERVAL 7 DAY);
  
  SET tb_name = (
    SELECT GROUP_CONCAT(TABLE_NAME)
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = DATABASE()
  );
  
  CALL execute_delete_query(tb_name, max_date);
END $$

DELIMITER ;

Cette procédure stockée initialise les variables pour stocker le nom de la base de données, la date de suppression maximale et un liste de noms de tables séparés par des virgules. Il appelle ensuite une fonction d'assistance (execute_delete_query) pour effectuer la suppression proprement dite.

Fonction d'assistance pour la suppression

CREATE FUNCTION execute_delete_query(tb_names VARCHAR(255), max_date DATE)
RETURNS INTEGER
BEGIN
  DECLARE tb_array [] VARCHAR(255);
  SET tb_array = SPLIT_STR(tb_names, ',');
  
  DECLARE i INT DEFAULT 1;
  DECLARE total_deleted INT DEFAULT 0;
  
  WHILE i <= SIZE(tb_array) DO
    SET @sql = CONCAT('DELETE FROM ', tb_array[i], ' WHERE update_timestamp < ''', max_date, ''');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    SET total_deleted = total_deleted + ROW_COUNT();
    DEALLOCATE PREPARE stmt;
    
    SET i = i + 1;
  END WHILE;
  
  RETURN total_deleted;
END

La fonction d'assistance execute_delete_query prend deux paramètres : une liste de noms de tables et un maximum date de suppression. Il parcourt les noms de tables, construit une requête de suppression pour chacune et l'exécute à l'aide d'une instruction préparée. Le nombre total de lignes supprimées est renvoyé.

Planification de la procédure stockée

Pour planifier l'exécution automatique de la procédure stockée tous les jours à 00h00, suivez ces étapes :

  1. Créez un événement en utilisant le SQL suivant déclaration :

    CREATE EVENT delete_old_data_event
    ON SCHEDULE AT '00:00' EVERY 1 DAY
    DO
    CALL delete_old_data();
  2. Activez le planificateur d'événements en définissant la variable système event_scheduler sur ON :

    SET GLOBAL event_scheduler = ON;
  3. Vérifiez que l'événement est planifié en exécutant Instruction SHOW EVENTS.

Conclusion

Cette méthode utilise Les procédures stockées, la planification d'événements et les fonctions d'assistance de MySQL pour créer une solution complète et automatisée pour supprimer les données obsolètes d'une base de données. En supprimant régulièrement les anciens enregistrements, vous pouvez maintenir l'efficacité et les performances de votre base de données tout en garantissant la conformité des 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