Maison >base de données >tutoriel mysql >Comment supprimer automatiquement les lignes de plus de 7 jours dans MySQL ?
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.
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.
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é.
Pour planifier l'exécution automatique de la procédure stockée tous les jours à 00h00, suivez ces étapes :
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();
Activez le planificateur d'événements en définissant la variable système event_scheduler sur ON :
SET GLOBAL event_scheduler = ON;
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!