mysql---事件

mysql事件:
    类似于Linux的cron功能,能很方便地实现定期运行指定命令。mysql自身的事件调度器(event scheduler)在时间上能够精确到秒。
    查看事件调度器是否开启,如果未开启使用SET GLOBAL event_scheduler = 1将其开启。
     

   mysql> show variables like '%event%';
        +----------------------------------------------------------+-------+
        | Variable_name                                            | Value |
        +----------------------------------------------------------+-------+
        | binlog_row_event_max_size                                | 8192  |
        | binlog_rows_query_log_events                             | OFF   |
        | event_scheduler                                          | ON    |
        +----------------------------------------------------------+-------+


    创建事件的语法:

   

 create 
            [definer = 创建者]
            event
            [if not exists]
            事件的名称(一般不超过64字符)
            on shedule + 特定时间点调度或者周期调度
                        如:
                        (1)at timestamp [interval 周期]
                        (2)every  周期
            starts 开始时间
            do 
                begin
                    sql语句或者函数(包括自定义函数)
                end

 实例说明:
    第一步:创建user表:
        //创建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;
    第二步:
        //创建事件
        DROP EVENT IF EXISTS `event_minute`;
        DELIMITER $$
        CREATE DEFINER=`root`@`localhost` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE 
        STARTS now() 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 ;
    第三步:查看结果
        然后每分钟后查看user表的内容可以发现:
        mysql> select * from user;
            +----+-------+---------+---------------------+
            | id | name  | address | addtime             |
            +----+-------+---------+---------------------+
            |  1 | test1 | test1   | 2020-02-07 14:06:04 |
            |  2 | test2 | test2   | 2020-02-07 14:06:05 |
            |  3 | test1 | test1   | 2020-02-07 14:07:04 |
            |  4 | test2 | test2   | 2020-02-07 14:07:04 |
            +----+-------+---------+---------------------+
    
    
    注意点:
        ON SCHEDULE 计划任务,有两种设定计划任务的方式:
        方式1:AT 时间戳,用来完成单次的计划任务;
              时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。
        方式2:EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务;
               时间(单位)的数量可以是任意整数,时间单位是关键词:YEAR,MONTH,DAY,


   mysql事件、函数、存储过程的区别:
    (1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
       存储过程,功能强大,可以执行包括修改表等一系列数据库操作;
       用户定义函数不能用于执行一组修改全局数据库状态的操作
    (2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。
      函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类
      存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
    (3)SQL语句中不可用存储过程,而可以使用函数。  
    (4)事件相对于函数和存储过程最大的区别是不需要用户手动调用,由事件调度器调用。

发布了76 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/shen_chengfeng/article/details/104209922