1.存储过程
存储过程是一些sql语句的集合。
语法格式如下:
CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>
a.过程名:可以自己任意定义只要符合mysql的命名规则即可;
b.过程参数:三种类型的参数输入、输出、输入输出,一般参数列表如这样定义IN stime DATETIME;
c.过程体:以begin开头,end结尾;
2.事件
Mysql事件从5.1版本开始引入,定时或周期性执行一些任务,类似Linux中的Crontab,MySQL事件里面可以直接写需要执行的SQL语句集,也可以调用写好的存储过程;循环执行可以最小到每秒;
(1)检测MySQL事件是否开启
SELECT @@event_scheduler;
SHOW VARIABLES LIKE 'event_scheduler';
(2)开启MySQL事件,两种方式
直接登录MySQL,进入命令开启:
SET GLOBAL event_scheduler=1;
SET GLOBAL event_scheduler=ON;
这种方式开启的MySQL重启后需要重新开启。
或者直接在配置文件中配置,Windows中的my.ini,Linux中的my.cnf文件配置
SET GLOBAL event_scheduler=ON;
这种文件配置有个好处是,每次重启MySQL服务器不用管是否开启事件。
(3)关闭MySQL事件,登录MySQL,命令行执行SET GLOBAL event_scheduler=OFF;或者修改配置文件,但记得重启;
(4)MySQL事件格式
语法格式如下:
DELIMITER //
CREATE
用户信息
[DEFINER = { user | CURRENT_USER }]
事件关键字
EVENT
判断是否存在
[IF NOT EXISTS]
事件名称,符合mysql命名规则即可
event_name
固定格式
ON SCHEDULE schedule
可选项,默认是ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;ON COMPLETION PRESERVE则不会drop掉。
[ON COMPLETION [NOT] PRESERVE]
设定event的状态,默认ENABLE:表示系统尝试执行这个事件。DISABLE:关闭该事情,可以用alter修改
[ENABLE | DISABLE | DISABLE ON SLAVE]
可选项,comment 用来描述event;相当注释,最大长度64个字节。
[COMMENT 'comment']
DO event_body; --这里面执行SQL或者调用存储过程
定时设置或者周期设置
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
使用示例如下
-- scheduleexample 1: run once
例子1:执行一次
AT 'YYYY-MM-DD HH:MM.SS'/CURRENT_TIMESTAMP { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] }
使用 AT 关键字执行一次,使用时把上面注释放开即可
scheduleexample 2: run at intervals forever after creation
例子2:每隔一段时间执行一次
EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...]
使用 EVERY 关键字执行一次,使用时把上面注释放开即可
scheduleexample 3: specified start time, end time and interval for execution
例子3:指定开始时间、结束时间,在时间区间内每隔一段时间执行一次
使用 EVERY 关键字指定时间间隔
EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...]
使用 STARTS 关键字指定开始时间
STARTS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1[HOUR|MONTH|WEEK|DAY|MINUTE|...] }
使用 ENDS 关键字指定结束时间
ENDS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] }
//DELIMITER
这里DELIMITER // //DELIMITER,我习惯用这个,你可以使用其他方式
DELIMITER $$ $$DELIMITER或者DELIMITER ;; ;;DELIMITER。。。
[DEFINER = { user | CURRENT_USER }]:用户信息