注意:
5.1以後才支援!
讓mysql
定期執行指定的一條命令。功能類似於
crontab
。1、 檢查你的
mysql
是否開了這個功能
show variables like 'event_scheduler';
我執行了一遍發現記錄為空說明我的
mysql
沒有開呢。
ok解決辦法
2、開啟你的
mysql
的計畫任務功能
使用這個功能之前必須確保event_scheduler已開啟,可執行
set global event_scheduler = 1;
或set global event_scheduler = on;
來開啟,也可以直接在啟動命令加上「–event_scheduler=1」,例如:mysqld ... --event_scheduler=1
my.ini or my.cnf 中的
[mysqld]
新增event_scheduler=on
二、建立事件(create event)
先來看一下它的語法:
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
1) 首先來看乙個簡單的例子來演示每秒插入一條記錄到資料表
use test;
create table aaa (timeline timestamp);
create event e_test_insert
on schedule every 1 second
do insert into test.aaa values (current_timestamp);
等待3秒鐘後,再執行查詢看看:
mysql> select * from aaa;
+---------------------+
| timeline |
+---------------------+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+---------------------+
2) 5天後清空test表:
create event e_test
on schedule at current_timestamp + interval 5 day
do truncate table test.aaa;
3) 2023年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;
[on completion [not] preserve]可以設定這個事件是執行一次還是持久執行,預設為not preserve。
8) 每天定時清空test表(只執行一次,任務完成後就終止該事件):
create event e_test
on schedule every 1 day
on completion not preserve
do truncate table test.aaa;
[enable | disable]可是設定該事件建立後狀態是否開啟或關閉,預設為enable。
[comment 『comment』]可以給該事件加上注釋。
三、修改事件(alter event)
alter event event_name
[on schedule schedule]
[rename to new_event_name]
[on completion [not] preserve]
[comment 'comment']
[enable | disable]
[do sql_statement]
1) 臨時關閉事件
alter event e_test disable;
2) 開啟事件
alter event e_test enable;
3) 將每天清空test表改為5天清空一次:
alter event e_test
on schedule every 5 day;
四、刪除事件(drop event)
語 法很簡單,如下所示:
drop event [if exists] event_name
例如刪除前面建立的e_test事件
drop event e_test;
當然前提是這個事件存在,否則會產生error 1513 (hy000): unknown event錯誤,因此最好加上if exists
drop event if exists e_test;
create event test
on schedule at '2007-09-01 12:00:00' + interval 1 day
on completion not preserve
do insert into yyy values('hhh','uuu');
解釋:從2007-09-01開始,每天對錶yyy在12:00:00進行乙個插入操作。而且只執行一次(on completion not preserve )
我的計畫任務為:
create event sysplan
on schedule at '2010-05-22 23:00:00' + interval 1 day
on completion not preserve
do truncate table bjproj.ae_tmp;
三、通過設定全域性變數event_scheduler 的值即可動態的控制事件排程器是否啟用。
檢視是否event_scheduler開啟 mysql> show variables like '%event%';
設定開啟 mysql> set global event_scheduler=on;
四、例子:
每分鐘插入一條日誌: delimiter // create event `user_log_event` on schedule every 1 minute starts '2010-12-27 00:00:00' on completion not preserve enable do begin insert into log set addtime=now(); end //
呼叫儲存過程: delimiter // create event `user_log_event` on schedule every 1 day starts '2010-00-00 00:00:00' on completion not preserve enable do begin call user_log_prov(); end
mysql計畫任務
1 檢查你的mysql是否開了這個功能 show variables like event scheduler 我執行了一遍發現記錄為空說明我的mysql沒有開呢。ok解決辦法 2 開啟你的mysql的計畫任務功能 使用這個功能之前必須確保event scheduler已開啟,可執行 set glo...
Ubuntu 計畫任務詳解
一.關於crontab 有些ubuntu 版本,cron是被預設安裝並啟動的。如果沒有啟動,自行設定並啟動 chkconfig sysv rc conf 配置檔案 etc crontab m h dom mon dow user command 17 root cd run parts report...
Linux計畫任務詳解
語法 at option time 常用選項 設定任務執行時間的格式 使用互動式方式建立乙個任務 at ls etc at ctrl d結束輸入 job 8 at sun apr 23 21 53 00 2017 使用指定檔案作為輸入 root localhost at f scripts slee...