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