mysql 存儲過程和事件調度


存儲過程(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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM