存储过程:

1. MySQL 5.0 以后开始支持存储过程。

2. 我们常用的SQL语句在执行的时候需要先编译,然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中(因而执行速度比较快),用户通过制定存错过程的名字并给定参数来调用执行它。


Event事件:

1. MySQL 5.1以后开始引入event概念;

2. event 即“时间触发器”,通过在特定时间触发SQL语句或者存储过程执行。



MySQL 定时删除数据实现方法:mysql存储过程 + event事件

1. 写存储过程


DELIMITER //

create procedure del_data(IN `date_inter` int) //创建存储过程, IN表示需要传入一个参数

begin

delete from EPISODE_CCM_GENERAL_INFO where time < date_sub(curdate(), interval date_inter day);

delete from EPISODE_CEM_GENERAL_INFO where time < date_sub(curdate(),interval date_inter day);

end //

DELIMITER ;

格式注意:

a. 这里的DELIMITER // :

DELIMITER是关键字,这句的作用是声明分隔符为//,由于MySQL默认以“;”为分隔符,如果没有声明新的分隔符,编译器会把存储过程当做SQL语句进行处理,存储过程的编译过程就会报错。所以事先声明当前段的分隔符是'//', 存储过程不会执行这些代码。DELIMITER ; 是将分隔符还原。

b. IN 输入参数,OUT输出参数,INOUT表示输入输出参数

c. 存储过程体的开始与结束用begin,end来标识;

d. curdate()返回当前的日期,e.g. 2015-06-18

    curtime()返回当前时间,e.g. 14:12:09

    now() 返回当前日期和时间,e.g. 2015-06-18 14:12:09

    date_sub()函数,从日期减去指定的时间间隔;

e. 查看存储过程命令:show procedure status where db = "dbname";

f. 删除存储过程命令:drop procedure;

g. delete语句表示删除date_inter天前的数据。


2. 写event事件

create event del_event  

on schedule 

EVERY 1 day  

STARTS '2015-05-11 13:00:00'  

ON COMPLETION  PRESERVE ENABLE  

do  call del_data(90)


a. 查看是否开启event:

    show variables like "event_scheduler";

b. 开启event: (1: on 0 :off)

    set global event_scheduler = 1;

c. on schedule 计划任务,有两种方式:

    i). at 时间戳,用来完成单次的计划任务;

    ii). every 时间,用来完成重复的计划任务;时间可以使用:year, month, day, hour, minute,seconds等。

d. on completion [not] preserve 

    on completion 表示当这个事件不会再发生的时候,preserve表示事件执行完毕后不会被drop掉。

    enable /disable表示开启/关闭事件。

    可以通过alter event event_name enable/disable更改事件的开启或关闭;

e. call del_data是调用存储过程;

f. show events 查看事件;