超详细的MySQL数据库事件--定时任务总结
概述
之前头条由于没有分类了,不做维护了,所以会把⼀些偏汇总的⽂章迁移到CSDN上。
这⾥也简单总结⼀下mysql如何⽤事件来实现定时任务。
⼀、事件概述
在MySQL 5.1中新增了⼀个特⾊功能事件调度器(Event Scheduler),简称事件。
事件(event)是MySQL在相应的时刻调⽤的过程式数据库对象。⼀个事件可调⽤⼀次,也可周期性的启动,它由⼀个特定的线程来管理的,也就是所谓的“事件调度器”。
事件和触发器类似,都是在某些事情发⽣的时候启动。当数据库上启动⼀条语句的时候,触发器就启动了,⽽事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。事件取代了原先只能由操作系统的计划任务来执⾏的⼯作,⽽且MySQL的事件调度器可以精确到每秒钟执⾏⼀个任务,⽽操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执⾏⼀次。
⼆、事件的优缺点
1、优点
⼀些对数据定时性操作不再依赖外部程序,⽽直接使⽤数据库本⾝提供的功能。可以实现每秒钟执⾏⼀个任务,这在⼀些对实时性要求较⾼的环境下就⾮常实⽤了。
2、缺点
定时触发,不可以调⽤。
三、事件调度器参数
事件由⼀个特定的线程来管理。启⽤事件调度器后,拥有SUPER权限的账户执⾏SHOW PROCESSLIST就可以看到这个线程了。
--查看事件是否开启。
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
对数函数的导数的推导过程
--全局开启事件调度器
SET GLOBAL event_scheduler = ON;
--全局关闭事件调度器
SET GLOBAL event_scheduler = OFF;
--永久开启事件调度器(在myf配置⽂件中添加)
#事件调度器启动状态
event_scheduler = on
四、创建事件
⼀条create event语句创建⼀个事件。每个事件由两个主要部分组成,第⼀部分是事件调度(eventschedule,表⽰事件何时启动以及按什么频率启动;
第⼆部分是事件动作(event action),这是事件启动时执⾏的代码,事件的动作包含⼀条SQL语句,它可能是⼀个简单地insert或者update语句,也可以使⼀个存储过程或者
benin…end语句块,这两种情况允许我们执⾏多条SQL。
⼀个事件可以是活动(打开)的或停⽌(关闭)的,活动意味着事件调度器检查事件动作是否必须调⽤,停⽌意味着事件的声明存储在⽬录中,但调度器不会检查它是否应该调⽤。在⼀个事件创建之后,它⽴即变为活动的,⼀个活动的事件可以执⾏⼀次或者多次。
相关语法:
CREATE
[DEFINER ={ user | CURRENT_USER }]
EVENT  [IF NOT EXISTS]  event_name
matlab中max用法
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval]...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval]...]access数据库范文
[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}
说明:
ps: ⼀些常⽤的时间间隔设置:
--每隔5秒钟执⾏
ON SCHEDULE EVERY 5 SECOND
-
-每隔1分钟执⾏
ON SCHEDULE EVERY 1 MINUTE
--每天凌晨1点执⾏
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
--每个⽉的第⼀天凌晨1点执⾏
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH) ,INTERVAL 1 HOUR)
--每 3 个⽉,从现在起⼀周后开始
ON SCHEDULE EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK
--每⼗⼆个⼩时,从现在起三⼗分钟后开始,并于现在起四个星期后结束
ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK 五、事件(定时任务)管理
1、查询事件
在MySQL中可以通过查询information_schema.events表,查看已创建的事件。
--查看当前所在库的事件
show events;adherent
--查看所有事件
SELECT * FROM information_schema.events;
2、修改事件
事件被创建之后,还可以使⽤ALTER EVENT语句修改其定义和相关属性
ALTER
[DEFINER={user | CURRENT_USER}]
EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
3、启动与关闭事件
ALTER EVENT语句可以让⼀个事件关闭或再次活动。
--启动事件。
ALTER EVENT event_name ENABLE;
--关闭事件。
ALTER EVENT event_name DISABLE;
4、删除事件
删除已经创建的事件可以使⽤DROP EVENT语句来实现。
DROP EVENT IF EXISTS event_name;
六、实例演⽰
1、事件+sql
创建名称为event_t1的事件,⽤于每隔5秒钟向数据表t1(⽤户信息表)中插⼊⼀条数据。
-- 创建⽤户信息表
CREATE TABLE IF NOT EXISTS t1
(
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '⽤户编号',
name VARCHAR(30) NOT NULL COMMENT '⽤户姓名',
create_time TIMESTAMP COMMENT '创建时间'
) COMMENT ='⽤户信息表';
-- 创建事件
CREATE EVENT IF NOT EXISTS event_t1
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
COMMENT '新增⽤户信息定时任务'
DO INSERT INTO t1(name,create_time) VALUES('hwb',NOW());
2、事件+存储过程
--创建总表
CREATE TABLE IF NOT EXISTS t_total
(
userNumber INT  COMMENT '⽤户数',
createtime TIMESTAMP COMMENT '创建时间'
) COMMENT ='总表';
--创建名称为t_total的存储过程,⽤于统计前⾯表插⼊的数量
CREATE PROCEDURE t_total()
BEGIN雕刻入门基础教程
DECLARE n_total INT default 0;
SELECT COUNT(*) INTO n_total FROM t1;
INSERT INTO t_total (userNumber,createtime) VALUES(n_total,NOW());
END;
--创建名称为event_total的事件,⽤于在每天12点调⽤存储过程。
CREATE EVENT IF NOT EXISTS event_total
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 12 HOUR) ON COMPLETION PRESERVE ENABLE
DO CALL t_total();mysql查看所有存储过程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。