zoukankan      html  css  js  c++  java
  • MySQL中的事件/定时任务

    转载自:http://www.cnblogs.com/chenpi/p/5137310.html

    什么是事件

    一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行;

    开启事件

    查看是否开启:

    show variables like 'event_scheduler';

    如果显示OFF,则输入以下语句开启:

    set global event_scheduler = on;

    提醒:虽然这里用set global event_scheduler = on语句开启了事件,但是每次重启电脑。或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF),所以想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间,只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可,如下:

    自定义事件举例

    首先、新建user表:

    复制代码
    -- ----------------------------
    -- Table structure for `user`
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `name` varchar(200) NOT NULL,
      `address` varchar(500) NOT NULL,
      `addtime` datetime NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    复制代码

    然后、新建事件,有两种事件类型,一个是间隔触发,另一个是特定事件触发。

    类型一:每隔一分钟插入一条数据:

    参数说明:

    DEFINER:创建者;

    ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);

    ENABLE:表示系统将执行这个事件;

    复制代码
    -- ----------------------------
    -- Event structure for `event_minute`
    -- ----------------------------
    DROP EVENT IF EXISTS `event_minute`;
    DELIMITER ;;
    CREATE DEFINER=`root`@`localhost` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE STARTS '2016-01-17 14:49:43' ON COMPLETION NOT PRESERVE ENABLE DO 

    BEGIN INSERT INTO USER(name, address,addtime) VALUES('test1','test1',now()); INSERT INTO USER(name, address,addtime) VALUES('test2','test2',now()); END ;; DELIMITER ;
    复制代码

    类型二:特定时间插入一条数据,如2016-01-17 15:30:00

    参数说明:

    DEFINER:创建者;

    ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);

    ENABLE:表示系统将执行这个事件;

    复制代码
    -- ----------------------------
    -- Event structure for `event_at`
    -- ----------------------------
    DROP EVENT IF EXISTS `event_at`;
    DELIMITER ;;
    CREATE DEFINER=`root`@`localhost` EVENT `event_at` ON SCHEDULE AT '2016-01-17 15:30:00' ON COMPLETION NOT PRESERVE ENABLE DO 

    BEGIN INSERT INTO USER(name, address,addtime) VALUES('AT','AT',now()); END ;; DELIMITER ;
    复制代码

    查看结果,结果正确:

  • 相关阅读:
    模块入门–搜索
    [hadoop源码阅读][2]package结构
    [hadoop源码阅读][8]datanodeDataStorage
    [hadoop源码阅读][4]org.apache.hadoop.io
    [hadoop源码阅读][6]org.apache.hadoop.ipcprotocol和心跳分析
    [hadoop源码阅读][1]源码目录结构
    [hadoop源码阅读][4]org.apache.hadoop.io.compress系列3使用压缩
    [hadoop源码阅读][3]新旧api区别
    [hadoop源码阅读][6]org.apache.hadoop.ipcipc总体结构和RPC
    [hadoop源码阅读][8]datanodeFSDataset
  • 原文地址:https://www.cnblogs.com/duanrantao/p/9330949.html
Copyright © 2011-2022 走看看