mysql 儲存過程和事件排程

奮程式序猿發表於2016-12-21

儲存過程(procedure):

建立一個儲存過程需要知道的基礎知識

1.確定輸入/輸出的引數和型別:

IN tname varchar(20) 其中 IN 表示輸入引數,tname  是引數名 varchar(20) 是引數型別

RETURNS int(10)  其中 RETURNS 表示輸出 返回  ,int(10) 表示 返回型別

2.定義變數和賦值。

declare 定義變數  例如   declare a float;

set 賦值    例如  set a=0;  或者 set a = rand();

如果set 的變數前面有@符號表示這個變數是一個會話變數。否則是一個區域性變數。

3.過程的出體部分。可以是各種運算,也可以是資料庫操作。支援 if ...else 、迴圈等基本語法。 

4.程式可以有返回值 也可以沒有

5.呼叫儲存過程 使用 call 例如  call pro_name('1','2');

建立一個儲存過程的格式:

create procedure   儲存過程名稱  (IN $table_name varchar(20),IN $field varchar(10))

begin //主體開始

//主體

end // 主體結束

definer

例如:

delimiter $$   設定語句結束符為 //
DROP PROCEDURE IF EXISTS select_number//
create procedure select_number(in ac int) 
begin
declare a text;
set a=ac;
select a;
end$$
delimiter ;    //將語句結束改回;

因為在儲存過程中使用了 ;號 為了不讓mysql 執行 需要修改mysql 語句結束符;

呼叫

call  select_number(11);

結果為  :

 

 基於這個建立一個事件:

create event if not exists test  
on schedule every 10  second
on completion preserve
do call select_number(11);

每隔10秒執行以下  select_number 這個儲存過程   test 是時間的名稱;

定時插入案例

儲存過程為:

 delimiter $$
 create procedure insert_name(in name varchar(20)) 
 begin
 insert into a2 values(name);
 end$$
delimiter ;

建立每個10秒插入事件:

create event if not exists insert_name  
on schedule every 10  second
on completion preserve
do call insert_name('test_name');

每隔多一點時間  檢視一個a2 表 看看是否多了一個  test_name  的值;

關閉事件:

alter event insert_name on completion preserve disable;

刪除事件:

drop event insert_name;

檢視所有事件:

show events;

如果event 執行不了,可能是因為event功能沒有開啟;

檢視event是否開啟:

show variables like '%scheduler%';

開啟:

set global event_scheduler = 1

 檢視有哪些儲存過程:

 show procedure status;

檢視儲存過程建立程式碼:

show create procedure proc_name;

 

相關文章