设为首页 收藏本站
查看: 635|回复: 0

[经验分享] mysql中的event事件控制

[复制链接]

尚未签到

发表于 2016-9-22 08:28:34 | 显示全部楼层 |阅读模式
mysql 中的event 在5.1及以上被支持,下面简单讲解下

1  启用
   mysql> SET GLOBAL event_scheduler = ON;
  关闭
    SET GLOBAL event_scheduler = OFF;

2 注意的是event一旦创建后,则只有创建者对它有权限操作,而且5.1的event规定了
event的名称为64个字母大小写倒不敏感,event中不能再创建修改和删除其他event.

3 创建一个event
   DELIMITER |

CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
      BEGIN
        UPDATE mytable SET mycol = mycol + 1;
      END |

DELIMITER ;
    这里注意用|来表示结束符号。这个事件是每隔1个小时更新数据表一次了
可以通过SHOW EVENTS\G 去看事件,如下
mysql> SHOW EVENTS\G
********************** 1. row **********************
                  Db: mysql
                Name: myevent
             Definer: dbuser@localhost
           Time zone: SYSTEM
                Type: ONE TIME
          Execute At: 2011-10-26 20:24:19
      Interval Value: NULL
      Interval Field: NULL
              Starts: NULL
                Ends: NULL
              Status: ENABLED
          Originator: 0
character_set_client: utf8
collation_connection: utf8_general_ci

  event在完成后会自动结束,除非显式地声明关闭,即
CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    ON COMPLETION PRESERVE
    DO
      BEGIN
        UPDATE mytable SET mycol = mycol + 1;
      END |
使用on completion即可
event结束后,其实还留在数据库中,除非drop掉,即
DROP EVENT myevent;
如果要循环执行event,用every,即

  CREATE EVENT myevent
    ON SCHEDULE EVERY 1 HOUR
    DO
      BEGIN
        UPDATE mytable SET mycol = mycol + 1;
      END |

也可以指定开始和结束时间
CREATE EVENT myevent
    ON SCHEDULE EVERY 1 HOUR
    STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
    DO
      BEGIN
        UPDATE mytable SET mycol = mycol + 1;
      END |

当然,INTERVAL后可以跟day,year,month,hour,minutes,seconds等了
也可以更新event,比如

ALTER EVENT myevent
    ON SCHEDULE EVERY 1 MONTH
    STARTS '2011-12-01 01:00:00' |
更名:
  ALTER EVENT myevent
    RENAME TO yourevent;

在PHP代码中,也可以执行event,比如:
  $query = "CREATE EVENT publish_:id  

    ON SCHEDULE AT FROM_UNIXTIME(:scheduleDate)  

  DO  

     BEGIN  

        UPDATE blog_posts SET status = 'published' WHERE id = :id;  

     END";  

     $stm = $db->prepare($query);  

   $stm->execute(array(":id" => $id, ":scheduleDate" => $scheduleDate));

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-275666-1-1.html 上篇帖子: 查看mysql表相关信息 下篇帖子: mysql++ use Unicode on Windows
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表