1. 程式人生 > >mysql定時刪除6個月前的表

mysql定時刪除6個月前的表

檢視定時是否開啟:

檢視event是否開啟 : SHOW VARIABLES LIKE '%event_sche%';
將事件計劃開啟 : SET GLOBAL event_scheduler = 1;
將事件計劃關閉 : SET GLOBAL event_scheduler = 0;

程式碼:

BEGIN
    -- 儲存表名
    DECLARE v_tableName varchar(40) DEFAULT 0;
    -- 時間
    -- DECLARE v_datetime DATETIME;
    -- DECLARE v_datetime TIMESTAMP;
  --  遍歷結束標記
  DECLARE done INT DEFAULT FALSE;
  -- 找出要刪除的表名
    DECLARE cursor_table CURSOR FOR 
    SELECT TABLE_NAME FROM information_schema.`TABLES` 
    WHERE TABLE_NAME like 'info_illegal_web_%' AND TABLE_SCHEMA = 'ydb_illegal_data_his' AND LENGTH(TABLE_NAME) = 25;
  -- 將結束標誌繫結到遊標
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    -- 設定時間
    -- SET v_datetime = UNIX_TIMESTAMP(DATE_SUB(SYSDATE(),INTERVAL 3 DAY));
  -- 開啟遊標
   OPEN cursor_table;
  
  -- 開始迴圈
  read_loop: LOOP
    FETCH cursor_table INTO v_tableName;
        
        -- 如果沒有資料,退出
    IF done THEN
      LEAVE read_loop;
    END IF;

        -- 刪除資料
        IF DATE(SUBSTR(v_tableName, 18)) <= DATE_SUB(CURDATE(),INTERVAL 6 MONTH) THEN
            SET @STMT :=CONCAT("DROP TABLE ",v_tableName);
            PREPARE STMT FROM @STMT;   
            EXECUTE STMT; 
            DEALLOCATE PREPARE STMT;
        END IF;
  END LOOP;

END