java技术--MySQL事件

1.mysql事件/定时器开启

(1)SELECT * FROM mysql.event;
(2)SHOW VARIABLES LIKE 'event_scheduler';-- 查看是否开启定时器
     <1>如果显示OFF,则输入以下语句开启:
        SET GLOBAL event_scheduler = on
        SET GLOBAL event_scheduler = 1; -- 开启定时器 0:off 1:on 
     <2>虽然开启了事件,但是每次重启电脑或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF)
     <3>想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间
     <4>只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可
(3)ALTER EVENT eventJob ON  COMPLETION PRESERVE ENABLE;-- 开启事件
(4)ALTER EVENT eventJob ON  COMPLETION PRESERVE DISABLE; -- 关闭事件

2.MySQL事件创建过程

1)创建存储过程,这里的存储过程主要提供给mysql的定时器event来调用去执行:
        <1>如果是复杂的sql逻辑语句,可以使用存储过程
        <2>如果是简单的sql语句,可以使用存储过程也可以直接将sql语句追加在event的do后面(do+sql语句)
        <3>简单应用实例:这里是简单sql,BEGIN...END部分也可以写在event的do后面
        create procedure mypro()
          BEGIN
           insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());
         END;2)紧接着创建mysql的定时器event:这里设置为每一秒执行一次      
       create event if not exists eventJob 
       on schedule every 1 second 
       on completion PRESERVE
       do call mypro();
       或者
       do insert into mytable (name,introduce,createtime) values ('1111','inner mongolia',now());3)至此准备工作已经写完了,mysql要想利用定时器必须的做准备工作,就是把mysql的定时器给开启: 
    <1>这一步是使用定时器必须要做的,但是顺序无所谓,
    <2>可以在(1)(2)之前或者之后都可以     
(4)紧接着还要开启事件
    <1>这一步必须要在开启定时器,创建事件完成之后进行
    <2>因为开启事件要使用创建的事件名称
(5)查看定时器状态:
    <1>这一步的顺序无所谓但必须要有,是用来查看定时器是否开启
    <2>如果定时器没有开启,创建的事件是无法使用的

3.事件应用实例:

1)每隔一秒自动调用e_test()存储过程
        CREATE EVENT IF NOT EXISTS event_test
         ON SCHEDULE EVERY 1 SECOND
         ON COMPLETION PRESERVE 
        DO CALL e_test();2)从现在开始每隔九天定时执行 
        CREATE EVENT EVENT1 
          ON SCHEDULE EVERY 9 DAY STARTS NOW() 
          ON COMPLETION PRESERVE ENABLE 
         DO 
         BEGIN 
           CALL TOTAL(); //调用存储过程
         END   
(3) 每个月的一号凌晨1 点执行 
        CREATE EVENT EVENT2 
          ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL     
             DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) 
         ON COMPLETION PRESERVE ENABLE 
        DO 
        BEGIN 
          CALL STAT(); //调用存储过程
        END 
  (4)每个季度一号的凌晨2点执行 
       CREATE EVENT TOTAL_SEASON_EVENT 
         ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'- 
         ',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)  
         ON COMPLETION PRESERVE ENABLE 
      DO 
      BEGIN 
         CALL SEASON_STAT(); //调用存储过程
      END 
   (5) 每年11号凌晨四点执行 
     CREATE EVENT TOTAL_YEAR_EVENT 
         ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-
            ',1)),INTERVAL 4 HOUR) 
         ON COMPLETION PRESERVE ENABLE 
     DO 
     BEGIN 
        CALL YEAR_STAT();  //调用存储过程
     END   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值