mysql__事件

如何开启事件

在使用事件这个功能,首先要保证你的mysql的版本是5.1以上,然后还要查看你的mysql服务器上的事件是否开启。
1.查看事件是否开启,使用如下命令查看:

SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

如果看到event_scheduler为on或者PROCESSLIST中显示有event_scheduler的信息说明就已经开启了事件。如果显示为off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就说明事件没有开启,我们需要开启它。
开启mysql的事件,通过如下三种方式开启:
1.通过动态参数修改
更改完这个参数就立刻生效了
注意:还是要在my.cnf中添加event_scheduler=ON。因为如果没有添加的话,mysql重启事件又会回到原来的状态了。

SET GLOBAL event_scheduler = ON;

2.更改配置文件然后重启
在my.cnf中的[mysqld]部分添加如下内容,然后重启mysql。

event_scheduler=ON

3.通过制定事件参数启动

mysqld ... --event_scheduler=ON

Mysql事件的语法简介

1.创建事件的语法

CREATE
    [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;

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}

参数详细说明:
definer: 定义事件执行的时候检查权限的用户。
on schedule schedule: 定义执行的时间和时间间隔。
on completion [not] preserve: 定义事件是一次执行还是永久执行,默认为一次执行,即not preserve
enable | disable | disable on slave 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上disable on slave。
coment ‘comment’: 定义事件的注释。

2.更改事件的语法

ALTER
    [DEFINER = { user | CURRENT_USER }]
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    [DO event_body]
  1. 删除事件的语法
DROP EVENT [IF EXISTS] event_name

Mysql事件实战

  1. 测试环境
    创建一个用于测试的test表:
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t1` datetime DEFAULT NULL,
  `id2` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8

2.实战1

  • 创建一个每隔3秒往test表中插入一条数据的事件,代码如下:
create event
if not exists test 
on schedule every 3 second 
on completion preserve 
do
    insert into test (id, t1) values('', now());
  • 创建一个10分钟后清空test表数据的事件
create event if not exists test
on schedule
at current_timestamp + interval 10 minute
do 
    truncate table test;
  • 创建一个在2012-08-23 00:00:00时刻清空test表数据的事件,代码如下:
create event if not exists test
on schedule
at timestamp '2012-08-23 00:00:00'
do
    truncate table test;
  • 创建一个从2012年8月22日21点45分开始到10分钟后结束,运行每隔3秒往test表中插入一条数据的事件,代码如下:
create event if not exists test
on schedule every 3 second
starts '2012-08-22 21:49:00' + interval 10 minute
on completion preserve
do
    insert into test(id,t1) values('',now());

3.实战2

  • 通过事件来定期的调用存储过程 创建一个让test表的id2字段每行加基数2的存储过程,存储过程代码如下:
drop procedure if exists test_add
delimiter $$
create procedure test_add()
begin
declare 1_id int default 1;
declare 1_id2 int default 0;
declare error_status int default 0;
declare datas cursor for select id from test;
open datas;
fetch datas into 1_id;
until error_status
end repeat;
close datas;
end $$
  • 事件设置2012-08-22 00:00:00时刻开始运行,每天用一次存储过程,40天后结束,代码如下:
create event test 
on schedule every 1 day
starts '2012-08-22 00:00:00'
ends '2012-08-22 00:00:00' + interval 40 day
on completion preserve do
call test_add();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值