mysql計畫任務 event schedule

2021-04-20 23:00:34 字數 3811 閱讀 4837

mysql的event schedule 可以讓你設定你的mysql資料庫再某段時間執行你想要的動作

這與檢視是不相同的。

create event test1

on schedule every 1 day

starts  '2007-09-01 12:00:00'

on completion not preserve

do insert into yyy values('hhh','uuu');

或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 )

使用這個功能之前必須確保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

要檢視當前是否已開啟事件排程器,可執行如下sql:

show variables like 'event_scheduler';

或select @@event_scheduler;

或show processlist;

二、建立事件(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;

mysql計畫任務

1 檢查你的mysql是否開了這個功能 show variables like event scheduler 我執行了一遍發現記錄為空說明我的mysql沒有開呢。ok解決辦法 2 開啟你的mysql的計畫任務功能 使用這個功能之前必須確保event scheduler已開啟,可執行 set glo...

使用MySQL計畫任務

原先,lamp的程式設計師為了完成一些週期性的資料庫操作任務,總是不得不借助於作業系統的幫助,比如windows的計畫任務,或者linux的contab。mysql5.1終於新增了event scheduler功能,可以直接在後台實現一下定時性的作業。但不知道什麼原因,在英文版的參考手冊中,位於觸發...

使用MySQL計畫任務

原先為了完成一些週期性的資料庫操作任務,總是不得不借助於作業系統的幫助,比如windows的計畫任務,或者linux的contab。mysql5.1終於新增了event scheduler功能,可以直接在後台實現一下定時性的作業。但不知道什麼原因,在英文版的參考手冊中,位於觸發器和檢視之間的第20章...