mysql中的定时调度用法_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';

a4c26d1e5885305701be709a3d33442f.png

法2,sql查询器中:select

@@event_scheduler;

a4c26d1e5885305701be709a3d33442f.png

法3,show

processlist;

a4c26d1e5885305701be709a3d33442f.png

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值