mysql 定時任務

2021-07-04 21:58:55 字數 4269 閱讀 3196

檢視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 communityserver(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]可以設定這個事件是執行一次還是持久執行,預設為notpreserve。

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錯誤,因此最好加上ifexists

drop event if exists e_test;

mysql 定時任務 生效 mysql定時任務

1.檢視是否開啟定時策略 show variables like event sche 若出現如下圖,則此時是關閉狀態 開啟定時策略 重啟無效 set global event scheduler 1 則需要在配置檔案my.ini的設定 重啟有效 mysqld event scheduler on ...

mysql定時任務

show variables like event scheduler 開啟定時任務 set global event scheduler on 定時更新 on completion not preserve 表示當事件不會再發生的情況下,刪除事件 注意特定時間執行的事件,如果設定了該引數,執行完畢...

mysql 定時任務

1 檢視event是否開啟 show variables like sche 2 將事件計畫開啟 set global event scheduler 1 3 建立 3.1 例 每天定時清空test表 create event e test on schedule every 1 daydo tru...