首頁 > 資料庫 > mysql教程 > MySQL如何自動刪除7天前的行?

MySQL如何自動刪除7天前的行?

Susan Sarandon
發布: 2024-12-07 00:42:11
原創
938 人瀏覽過

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

自動刪除MySQL 中超過7 天的行

簡介

資料庫經常會隨著時間的推移積累過時的數據,導致表膨脹和效能問題。為了有效管理此類數據,MySQL 提供了建立自動清理任務的預存程序的功能。

建立預存程序來刪除舊資料

以下預存程序將自動刪除超過7 的行資料庫中所有資料表的天數:

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 ;
登入後複製

此預存程序初始化變數來儲存資料庫名稱、最大刪除日期和逗號分隔的表名清單。然後,它會呼叫輔助函數 (execute_delete_query) 來執行實際刪除。

用於刪除的輔助函數

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
登入後複製

輔助函數execute_delete_query 接受兩個參數:表名清單和最大值刪除日期。它遍歷表名,為每個表建立一個刪除查詢,並使用準備好的語句執行它。傳回已刪除行的總數。

排程預存程序

要安排預存程序在每天00:00 自動執行,請依照下列步驟操作:

  1. 使用下列步驟操作:

    CREATE EVENT delete_old_data_event
    ON SCHEDULE AT '00:00' EVERY 1 DAY
    DO
    CALL delete_old_data();
    登入後複製
  2. SET GLOBAL event_scheduler = ON;
    登入後複製
    透過將event_scheduler 系統變數設定為ON 來啟用事件調度程序:

透過執行驗證事件是否已調度展會活動

結論此此方法使用MySQL的預存程序、事件調度和輔助函數來建立一個全面且自動化的解決方案,用於從資料庫中刪除過時的資料。透過定期刪除舊記錄,您可以保持資料庫的效率和效能,同時確保資料合規性。

以上是MySQL如何自動刪除7天前的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板