Mysql事件学习
来源:互联网 发布:美国失业金数据公布网 编辑:程序博客网 时间:2024/06/05 16:10
转载:http://blog.chinaunix.net/uid-20639775-id-3323098.html
Mysql事件学习
在系统管理或者数据库管理中,经常要周期性的执行某一个命令或者SQL语句。对于linux系统熟悉的人都知道linux的cron计划任务,能很方便地实现定期运行指定命令的功能。Mysql在5.1以后推出了事件调度器(EventScheduler),和linux的cron功能一样,能方便地实现
由于最近需要用到事件这个功能,因此学习了一下,感觉非常棒,总结一下,方便以后使用,也希望能对其他的初学者有帮助。
一、
在使用事件这个功能,首先要保证你的mysql的版本是5.1以上,然后还要查看你的mysql服务器上的事件是否开启。
查看事件是否开启,使用如下命令查看:
SHOW VARIABLES LIKE'event_scheduler';
SELECT@@event_scheduler;
SHOW PROCESSLIST;
如果看到event_scheduler为on或者PROCESSLIST中显示有event_scheduler的信息说明就已经开启了事件。如果显示为off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就说明事件没有开启,我们需要开启它。
开启mysql的事件,通过如下三种方式开启:
Ø
SET GLOBAL event_scheduler =ON;
更改完这个参数就立刻生效了
注意:还是要在my.cnf中添加event_scheduler=ON。因为如果没有添加的话,mysql重启事件又会回到原来的状态了。
Ø
在my.cnf中的[mysqld]部分添加如下内容,然后重启mysql。
event_scheduler=ON
Ø
mysqld ...--event_scheduler=ON
二、
1.
CREATE
schedule:
interval:
DAY_MINUTE|DAY_SECOND | HOUR_MINUTE |
HOUR_SECOND |MINUTE_SECOND}
参数详细说明:
DEFINER:
ON SCHEDULEschedule:
ON COMPLETION[NOT] PRESERVE:
ENABLE |DISABLE | DISABLE ON SLAVE:
COMMENT'comment':
2.
ALTER
3.
DROP EVENT[IF EXISTS] event_name
三、
1.
创建一个用于测试的test表:
CREATE
)
2.
Ø
CREATE EVENT IF NOT EXISTStest ON SCHEDULE EVERY 3 SECOND
ON COMPLETIONPRESERVE
DO INSERT INTO test(id,t1)VALUES('',NOW());
Ø
CREATE EVENT IF NOT EXISTStest
ON SCHEDULE
AT CURRENT_TIMESTAMP +INTERVAL 1 MINUTE
DO TRUNCATE TABLEtest.aaa;
Ø
CREATE EVENT IF NOT EXISTStest
ON SCHEDULE
AT TIMESTAMP '2012-08-2300:00:00'
DO TRUNCATE TABLEtest;
Ø
CREATE EVENT IF NOT EXISTStest ON SCHEDULE EVERY 3 SECOND
STARTS '2012-08-2221:49:00'
ENDS '2012-08-22 21:49:00'+INTERVAL
ON COMPLETIONPRESERVE
DO INSERT INTO test(id,t1)VALUES('',NOW());
3.
通常的应用场景是通过事件来定期的调用存储过程,下面是一个简单的示例:
创建一个让test表的id2字段每行加基数2的存储过程,存储过程代码如下:
DROP PROCEDURE IF EXISTStest_add;
DELIMITER //
CREATE PROCEDUREtest_add()
BEGIN
DECLARE 1_id INT DEFAULT1;
DECLARE 1_id2 INT DEFAULT0;
DECLARE error_status INTDEFAULT 0;
DECLARE datasCURSOR
DECLARE CONTINUE HANDLER FORNOT FOUND SET error_status=1;
OPEN datas;
FETCH datas INTO1_id;
REPEAT
SET
UPDATE test SET id2=1_id2WHERE id=1_id;
FETCH datas INTO1_id;
UNTIL
END REPEAT;
CLOSE
END
//
事件设置2012-08-22 00:00:00时刻开始运行,每隔1调用一次存储过程,40天后结束,代码如下:
CREATE EVENT test ON SCHEDULEEVERY 1 DAY
STARTS '2012-08-2200:00:00'
ENDS '2012-08-2200:00:00'+INTERVAL 40 DAY
ON COMPLETION PRESERVEDO
CALL test_add();
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- Mysql事件学习
- MySQL 事件的学习
- mysql 学习---->事件调度器
- MySQL点滴学习之事件调度器
- mysql 事件
- MySQL 事件
- mysql事件
- mysql 事件
- nginx之服务器
- memcache分布式实现、memcache分布…
- eAccelerator介绍
- Ubuntu下Qt 无法显示菜单栏
- LAMP网站架构方案分析
- Mysql事件学习
- PHP负载均衡
- MYSQL批处理
- 服务器端PHP多进程编程
- PHP-popen() 函数打开进程文件指针
- php并发处理
- PHP能得到你是从什么页面过来的,r…
- PHP程序漏洞产生的原因和防范方法
- PHP如何解决网站大流量与高并发的…