当前位置:数据库 > 数据库管理> 正文

mysql定时任务

时间:2016-3-27类别:数据库

mysql定时任务

mysql定时任务

一、查看事件调度器是否开启

  •  
  • 
    SHOW VARIABLES LIKE 'event_scheduler';
    
    --
    
    SELECT @@event_scheduler;
    
    --
    
    SHOW PROCESSLIST;
    
    
    		
  •  

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

  •  
  • SET GLOBAL event_scheduler = ON;
    
    
    				
  •  

    备注

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

     

     

    二、创建事件

     

    1、语法

     

  •  
  • SQL 代码   复制
  • 
    CREATE EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'comment']
    DO sql_statement;
    
    schedule:
    AT TIMESTAMP [+ INTERVAL INTERVAL]
    | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
    
    INTERVAL:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
                WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
                DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
    
    		
  •  

    2、参数说明

    (1)、DEFINER: 定义事件执行的时候检查权限的用户。

    (2)、ON SCHEDULE schedule: 定义执行的时间和时间间隔。

    (3)、ON COMPLETION [NOT] PRESERVE: 定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE。

    (4)、ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。

    (5)、COMMENT 'comment': 定义事件的注释。

     

    3、创建实例

     

    创建如下表

    CREATE TABLE aaa (timeline TIMESTAMP);

     

    1)、首先来看一个简单的例子来演示每秒插入一条记录到数据表

  •  
  • 
    CREATE EVENT e_test_insert
    ON SCHEDULE EVERY 1 SECOND 
    DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
    
    		
  •  

    2) 、5天后清空test表

  •  
  • 
    CREATE EVENT e_test
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;
    
    		
  •  

    3) 、2007年7月20日12点整清空test表

  •  
  • 
    CREATE EVENT e_test
    ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
    DO TRUNCATE TABLE test.aaa;
    
    		
  •  

    4) 、每天定时清空test表

  •  
  • 
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    DO TRUNCATE TABLE test.aaa;
    
    		
  •  

    5) 、5天后开启每天定时清空test表

  •  
  • 
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;
    
    		
  •  

    6) 、每天定时清空test表,5天后停止执行

  •  
  • 
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;
    
    		
  •  

    7) 、5天后开启每天定时清空test表,一个月后停止执行

  •  
  • 
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
    DO TRUNCATE TABLE test.aaa;
    
    		
  •  

    8) 、每天定时清空test表 (只执行一次,任务完成后就终止该事件)

  •  
  • 
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    ON COMPLETION NOT PRESERVE
    DO TRUNCATE TABLE test.aaa;
    
    		
  •  

     

    三、修改事件

     

    1、语法

     

  •  
  • SQL 代码   复制
  • 
    ALTER EVENT event_name
    [ON SCHEDULE schedule]
    [RENAME TO new_event_name]
    [ON COMPLETION [NOT] PRESERVE]
    [COMMENT 'comment']
    [ENABLE | DISABLE]
    [DO sql_statement]
    
    		
  •  

    2、实例

     

    1) 临时关闭事件

    ALTER EVENT e_test DISABLE;
     

    2) 开启事件

    ALTER EVENT e_test ENABLE;


    3) 将每天清空test表改为5天清空一次:

    ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY;

     

     

    四、删除事件

     

    1、语法

    DROP EVENT [IF EXISTS] event_name

     

    2、实例

    删除前面创建的e_test事件

    DROP EVENT IF EXISTS e_test

     

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐