MySQL:根據時間規則定時清除匹配數據

MySQL:根據時間規則定時清除匹配數據


一 . 場景

有時,我們可能需要定時清除數據庫一些廢棄的數據,可以使用mysql的存儲過程和事件來完成。

提示:本文不對MySQL的事件Event進行詳細介紹,如果想了解詳細內容,請查看文章《MySQL:簡述MySQL中的事件Event》。

二 . 實現

首先創建Table,添加數據,執行語句如下:

drop table if exists table_timestamp;
create table table_timestamp
(
   message_pk          bigint not null auto_increment,

   message_content     varchar(99),

   /* 創建時間不可爲空*/
   CreateTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間' ,

   primary key (message_pk)
);

/* 初始化數據 */
insert into table_timestamp(message_content,CreateTime) values('a','2019-01-08 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('b','2019-01-09 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('c','2019-01-10 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('d','2019-01-13 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('e','2019-01-14 12:37:44');

1 . 簡單實現:事件
要求:刪除三天以前的數據,實現如下:

select * from table_timestamp;

drop event if exists event_timestamp;
create event event_timestamp
    on schedule every 1 minute starts '2019-01-15 10:38:00' 
    on completion not preserve
    enable
    do delete from table_timestamp where (to_days(now()) - to_days(createtime))>=3;  

select * from table_timestamp;

2 . 複雜實現:事件+存儲過程
要求:根據傳入參數,刪除相應的數據,實現如下:

select * from table_timestamp;

drop procedure if exists procedure_timestamp;
delimiter $$
create procedure procedure_timestamp(in date_inter int)
begin
   delete from table_timestamp where (to_days(now()) - to_days(createtime))>=date_inter;  
end$$
delimiter ;

drop event if exists event_procedure_timestamp;
create event event_procedure_timestamp
    on schedule every 1 minute starts '2019-01-15 10:38:00'
    on completion not preserve
    enable
    do call procedure_timestamp(3);

select * from table_timestamp;

三 . 實現樣例

drop table if exists table_timestamp;
create table table_timestamp
(
   message_pk          bigint not null auto_increment,

   message_content     varchar(99),

   /* 創建時間不可爲空*/
   CreateTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間' ,

   primary key (message_pk)
);

/* 初始化數據 */
insert into table_timestamp(message_content,CreateTime) values('a','2019-01-08 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('b','2019-01-09 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('c','2019-01-10 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('d','2019-01-13 12:37:44');
insert into table_timestamp(message_content,CreateTime) values('e','2019-01-14 12:37:44');

/* 事件 */
drop event if exists event_timestamp;
create event event_timestamp
    on schedule every 1 minute starts '2019-01-15 10:38:00' 
    on completion not preserve
    enable
    do delete from table_timestamp where (to_days(now()) - to_days(createtime))>=3;  


/* 事件+存儲過程 */
drop procedure if exists procedure_timestamp;
delimiter $$
create procedure procedure_timestamp(in date_inter int)
begin
   delete from table_timestamp where (to_days(now()) - to_days(createtime))>=date_inter;  
end$$
delimiter ;

drop event if exists event_procedure_timestamp;
create event event_procedure_timestamp
    on schedule every 1 minute starts '2019-01-15 10:38:00'
    on completion not preserve
    enable
    do call procedure_timestamp(3);

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章