Mysql 事件(定時任務)

mysql 建立任務(事件)
  一、檢查數據庫事件是否開啓,若是 event_scheduler 等於 NO表示開啓
    SELECT @@event_scheduler;
    SHOW VARIABLES LIKE 'event_scheduler';
    SELECT @@event_scheduler;
  二、開啓任務(事件)
    a、set global event_scheduler=1;
    b、SET GLOBAL event_scheduler = ON;
    c、在my.cnf中的[mysqld]部分添加 event_scheduler=ON 而後重啓mysql。
  三、關閉事件
    SET GLOBAL event_scheduler = OFF;
  四、語法:
 mysql

CREATE
        [DEFINER = { user | CURRENT_USER }]
        EVENT
        [IF NOT EXISTS]
        event_name
        ON SCHEDULE schedule
        [ON COMPLETION [NOT] PRESERVE]
        [ENABLE | DISABLE | DISABLE ON SLAVE]
        [COMMENT 'comment']
        DO event_body;
    schedule:
        AT timestamp [+ INTERVAL interval] ...
         | EVERY interval
        [STARTS timestamp [+ INTERVAL interval] ...]
        [ENDS timestamp [+ INTERVAL interval] ...]
    interval:
      quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
                  WEEK | SECOND | YEAR_MONTH | DAY_HOUR |
    DAY_MINUTE |DAY_SECOND | HOUR_MINUTE |
    HOUR_SECOND | MINUTE_SECOND}    

參數詳細說明:
DEFINER: 定義事件執行的時候檢查權限的用戶。
ON SCHEDULE schedule: 定義執行的時間和時間間隔。
ON COMPLETION [NOT] PRESERVE: 定義事件是一次執行仍是永久執行,默認爲一次執行,即NOT PRESERVE。
ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件建立之後是開啓仍是關閉,以及在從上關閉。若是是從服務器自動同步主上的建立事件的語句的話,會自動加上DISABLE ON SLAVE。
COMMENT 'comment': 定義事件的註釋。
五、開啓事件
alter event event_name(事件名稱) ON COMPLETION PRESERVE ENABLE;
六、關閉事件
alter event event_name(事件名稱) ON COMPLETION PRESERVE DISABLE;
七、刪除事件
DROP EVENT [IF EXISTS] event_name(事件名稱)
八、案例sql

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t1` datetime DEFAULT NULL,
  `id2` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8

<!-- 建立一個每隔3秒往test表中插入一條數據的事件 -->
CREATE EVENT IF NOT EXISTS e_test_1 ON SCHEDULE EVERY 3 SECOND
ON COMPLETION PRESERVE
DO INSERT INTO test(id,t1) VALUES(NULL,NOW());
<!-- 建立一個10分鐘後清空test表數據的事件  -->
CREATE EVENT IF NOT EXISTS e_test_2
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO TRUNCATE TABLE test;
<!-- 調用存儲過程 -->
1、建立過程
CREATE PROCEDURE pro_test()
    BEGIN
        INSERT INTO test(id,t1,id2) VALUES(NULL,NOW(),'1000000');
    END
2、調用過程
CREATE EVENT IF NOT EXISTS e_test_3 ON SCHEDULE EVERY 3 SECOND
ON COMPLETION PRESERVE
DO CALL pro_test();

九、關於事件的權限問題 (Access denied for user 'root'@'%' to database ‘xxxx’)
  使用Naicat Premium遠程鏈接的mysql上面建立了一個新數據庫和新的用戶後,給該用戶添加這個新數據庫權限時出現:
  access denied for user 'root'@'%' to database xxxx的提示。
  錯誤的緣由是root用戶在遠程鏈接的MYSQL上面,沒有這個新數據庫的受權。在本地使用mysql應該不存在這個問題。
  解決方法,執行受權:
    UPDATE mysql.user SET Event_priv = 'Y' WHERE HOST='%' AND USER='root';
    FLUSH PRIVILEGES;
    grant all PRIVILEGES on xxxx.* to root@'%' identified by 'password' with grant option;
    grant all on xxxx.* to 'root'@'%' identified by 'password' with grant option;
    xxxx爲建立的數據庫,password爲root的密碼。請按實際要求進行更改。數據庫

相關文章
相關標籤/搜索