MySQL定時執行指令碼 計畫任務 命令例項

2021-07-16 08:19:30 字數 4405 閱讀 9806

檢視event是否開啟

複製**

**如下:  

show variables like '%sche%'; 

將事件計畫開啟

複製**

**如下: 

set global event_scheduler =1;

建立儲存過程test

複製**

**如下:

create procedure test () 

begin 

update examinfo set endtime = now() where id = 14; 

end; 

建立event e_test

複製**

**如下:

create event if not exists e_test 

on schedule every 30 second 

on completion preserve 

do call test(); 

每隔30秒將執行儲存過程test,將當前時間更新到examinfo表中id=14的記錄的endtime欄位中去.

關閉事件任務

複製**

**如下:

alter event e_test on 

completion preserve disable; 

開戶事件任務

複製**

**如下:

alter event e_test on 

completion preserve enable; 

以上測試均成功,測試環境為mysql 5.4.2-beta-community mysql community server(gpl)

mysql 計畫任務重啟後消失

我們只要修改一配置即可

event_scheduler在mysql的config中設定為off有關。去mysql中將配置改為on則就搞定了。

更詳細的大家可以往下看

mysql5.1.x版本中引入了一項新特性event,顧名思義就是事件、定時任務機制,在指定的時間單元內執行特定的任務,因此今後一些對資料定時性操作不再依賴外部程式,而直接使用資料庫本身提供的功能。

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

show variables like 'event_scheduler';

或select @@event_scheduler;

或show processlist;

若顯示:

+-----------------+-------+

| variable_name   | value |

+-----------------+-------+

| event_scheduler | off   |

+-----------------+-------+

則可執行

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秒鐘後,再執行查詢成功。

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定時執行指令碼 計畫任務 例項

具體 在mysql中我們可以直接進行一些引數設定讓它成定時為我們執行一些任務了,這個雖然可以使用windows或者linux中的計畫任務實現,但是mysql本身也能完成。檢視event是否開啟 如下 複製 show variables like sche 將事件計畫開啟 如下 複製 set glob...

MySQL定時執行指令碼 計畫任務 命令例項

檢視event是否開啟 複製 如下 show variables like sche 將事件計畫開啟 複製 如下 set global event scheduler 1 建立儲存過程test 複製 如下 create procedure test begin update examinfo set...

MySQL定時執行指令碼 計畫任務 命令例項

登入mysql伺服器 mysql u root p檢視event是否開啟 show variables like sche 將事件計畫開啟 set global event scheduler 1 建立儲存過程test create procedure test begin update exami...