MySQL的存储过程和事件的简单介绍

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 }]:用户信息

发布了4 篇原创文章 · 获赞 2 · 访问量 364
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览