MySql 定时任务的使用
MySql 定时任务的使用
by:授客 QQ:1033553122
简介
自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
操作:
1,开启event_scheduler计划。
法1:
新建查询,执行语句:set GLOBAL event_scheduler = 1;
法2:编辑my.cnf,进入mysql安装目录,找到my.cnf配置文件,在文件中添加event_scheduler = 1
示例(linux下)
builder:~# find / -name my.cnf
/mnt/mysql/my.cnf
builder:~# cd /mnt/mysql/
builder:/mnt/mysql# vi my.cnf
……
2,要查看当前是否已开启事件调度器
执行如下SQL:
法1,sql查询器中:show variables like 'event_scheduler';
法2,sql查询器中:select @@event_scheduler;
法3,show processlist;
3,创建事件(create event)
语法:
CREATE EVENT [IFNOT EXISTS] event_name
ONSCHEDULE schedule
[ONCOMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
注:
schedule:
AT TIMESTAMP [+ INTERVAL INTERVAL]
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS
TIMESTAMP]
INTERVAL:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE
| DAY_SECOND | HOUR_MINUTE | OUR_SECOND | MINUTE_SECOND}
[ENABLE | DISABLE]:设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT ‘comment’]:可以给该事件加上注释。
4,修改事件(ALTER EVENT)
语法:
ALTER EVENT event_name
[ONSCHEDULE schedule]
[RENAME TOnew_event_name]
[ONCOMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
5,删除事件(DROP EVENT)
语法:
DROP EVENT [IF EXISTS] event_name
6,举例
#查看数据库版本[5.1.6起]
select version();
#开启evenet_sheduler进程
set GLOBAL event_scheduler = 1;
#查看当前是否已开启事件调度器
#法1
show variables like 'event_scheduler';
#法2
select @@event_scheduler;
#法3
show processlist;
#查看当前数据库中所有事件
show events;
#查看所有数据库中所有事件
#法1
select * from mysql.event;
#法2
select * from information_schema.events
#创建定时任务
#1.测试环境搭建
#1.1查看存在那些数据库
show databases;
#1.2进入数据库
use test;
#1.3查看表
show tables;
#1.4创建测试表student
create table student
(
num integer,
name varchar(6),
addr varchar(10),
comment varchar(15)
)
#1.5显示表结构
desc student;
#1.6插入数据
insert into student values(1,'lili','noaddr','nocomment');
insert into student values(2,'xiaoli','noaddr','nocomment');
insert into student select * from student;
#2创建定时清理任务
#2.1每3秒清理一次表
create event if not exists e_delete
on schedule every 3 second
do truncate table test.student;
#查看效果
select * from test.student;
#2.2每天插入1条数据
create event e_insert
on schedule every 1 day
do insert into test.student values(3,'test','noaddr','nocoment');
#2.3五天后清空表
create event e_truncate
on schedule at current_timestamp + interval 5 day
do truncate table test.student;
#2012年11月12日12点12分12秒清空表
create event e_truncate
on schedule at timestamp '2012-11-12 12:12:12'
do truncate table test.student;
#每1天执行一次清空表
create event e_truncate
on schedule every 1 day
do truncate table test.student;
#五天后开启每天执行一次清空表
create event e_truncate
on schedule every 1 day
starts current_timestamp + interval 5 day
do truncate table test.student;
#五天后停止每天执行一次清空表
create event e_truncate
on schedule every 1 day
ends current_timestamp + interval 5 day
do truncate table test.student;
#五天后开启每天执行一次清空表,1个月后停止
create event e_truncate
on schedule every 1 day
starts current_timestamp + interval 5 day
ends current_timestamp + interval 1 month
do truncate table test.student;
#每天执行一次清空表,执行完后终止事件,以后都不执行了
create event e_truncate
on schedule every 1 day
on completion not preserve
do truncate table test.student;
#3临时关闭事件
use test;
alter event e_delete disable;
#注意:禁用定时功能后,当你重新启动mysql服务时,该定时功能可能被删除。查看是否被删除语句如下
show events;
#4开启事件
use testdb;
alter event e_delete enable;
#5修改事件,如改为每5天清理一次
alter event e_delete
on schedule every 5 day
do truncate table table_name;
#6永久删除事件
use testdb;
drop event if exists e_delete;
作者:授客
微信/QQ:1033553122
全国软件测试QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
微信打赏
支付宝打赏 全国软件测试交流QQ群
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库