Mysql之事件小結

2021-07-28 07:50:54 字數 3345 閱讀 4406

一、什麼是事件?

一組sql集,用來執行定時任務,跟觸發器很像,都是被動執行的,事件是因為時間到了觸發執行,而觸發器是因為某件事件(增刪改)觸發執行。

二、開啟事件排程器

在建立事件時,首先要檢視當前是否已開啟事件排程器。可以用以下命令:

show variables like 『event_scheduler』;或

如若沒有被開啟,可通過執行如下mysql命令語句來開啟該功能:

set global event_scheduler=1;(或者true,on)

三、建立事件之事件實戰

首先,建立一張測試表test

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

1、建立乙個每隔3秒往test表中插入一條資料的事件,**如下:

create event if

notexists test on schedule every 3

second

on completion preserve

doinsert

into test(id,t1) values('',now());

2、 建立乙個10分鐘後清空test表資料的事件

create event if

notexists test

on schedule

atcurrent_timestamp + interval

1minute

dotruncate

table test.aaa;

3、建立乙個在2017-03-12 00:00:00時刻清空test表資料的事件,**如下:

create event if

notexists test

on schedule

attimestamp

'2012-08-23 00:00:00'

dotruncate

table test;

4、建立乙個從2023年8月22日21點45分開始到10分鐘後結束,執行每隔3秒往test表中插入一條資料的事件,**如下:

create event if

notexists test on schedule every 3

second

starts '2012-08-22 21:49:00'

ends '2012-08-22 21:49:00'+ interval

10minute

on completion preserve

doinsert

into test(id,t1) values('',now());

5、通常的應用場景是通過事件來定期的呼叫儲存過程,下面是乙個簡單的示例,建立乙個讓test表的id2欄位每行加基數2的儲存過程,儲存過程**如下:

drop procedure

ifexists

test_add;

delimiter //

create

procedure

test_add

()begin

declare 1_id

intdefault 1;

declare 1_id2 int default

0;declare error_status int default

0;declare datas cursor for

select id from test;

declare continue handler for

not found set error_status=1;

open datas;

fetch datas into

1_id;

repeat

set1_id2=1_id2+2;

update test set id2=1_id2 where id=1_id;

fetch datas into

1_id;

until error_status

endrepeat;

close datas;

end//

6、事件設定2017-03-22 00:00:00時刻開始執行,每隔1呼叫一次儲存過程,40天後結束,**如下:

create event test on schedule every 1

daystarts '2012-08-22 00:00:00'

ends '2012-08-22 00:00:00'+interval

40day

on completion preserve

docall test_add();

四、修改事件alter event event_insert disable;//臨時關閉建立的事件event_insert_1

alter event event_insert_1 enable;//再次開啟臨時關閉的事件

alter event event_insert_1 rename to e_insert_1;//將事件event_insert_1的名字修改為事件e_insert_1

五、刪除事件

drop event if exists e_insert_1;

MySQL之事件學習整理

在使用事件之前需要啟用mysql的事件排程器 event scheduler 啟用方式如下 set global event scheduler 1 或者 set global event scheduler on 然後我們可以檢視排程器是否已經開啟 show variables like even...

觸控事件之事件傳遞

uiview是如何判定這個事件是否是自己應該處理的呢?hittest withevent 方法的處理流程如下 呼叫當前view的pointinside withevent 方法來判定觸控點是否在當前view內部,如果返回no,則hittest withevent 返回nil 如果返回yes,則向當前...

RT thread核心之事件

一 事件控制塊 在include rtdef.h中 ifdef rt using event flag defintions in event define rt event flag and 0x01 logic and define rt event flag or 0x02 logic or ...