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