標籤:
一、預存程序概念
使用SQL編寫訪問資料庫的代碼時,可用兩種方法儲存和執行這些代碼,一種是在用戶端儲存代碼,並建立向資料庫伺服器發送的SQL命令(或SQL語句),比如在C#、Java等用戶端程式設計語言中嵌入訪問資料庫的SQL語句;另一種是將SQL語句儲存在資料庫伺服器端(實際是儲存在具體的資料庫中,作為資料庫的一個對象),然後由應用程式調用執行這些SQL語句。
這些儲存在資料庫伺服器端供用戶端調用執行的SQL語句就是預存程序,用戶端應用程式可以直接調用並執行預存程序,預存程序的執行結果可返回給用戶端。
預存程序可以:
- 接受輸入參數並以輸出參數的形式將多個值返回給調用者。
- 包含執行資料庫操作的語句。
- 將查詢語句執行結果返回到用戶端記憶體中。
總之,預存程序實際是儲存在資料庫伺服器上的、由SQL語句和流程式控制制語句組成的先行編譯集合,它以一個名字儲存並作為一個單元處理,可由應用程式調用執行,允許包含控制流程、邏輯以及對資料的查詢等操作。預存程序可以接受輸入參數,並可具有輸出參數,還可以返回單個或多個結果集。
二、建立預存程序
create procedure 過程名字(參數列表)begin --過程體end
簡單一實例:
三、查看預存程序
show procedure status [like‘procedure_name‘];
簡單一實例:
其中‘\G‘表示:以每組顯示查詢結果
查看建立語句:
show create procedure procedure_name;
四、調用預存程序
不能用select來訪問預存程序:
調用預存程序應該用 call:
五、修改&刪除預存程序
預存程序不能修改,只能刪除後在添加
drop procedure 預存程序名;
六、預存程序參數
函數的參數需要資料類型指定,過程比函數更嚴格
過程還有自己的類型限定:
- in:資料只是從外部傳入給內部使用(值傳遞),可以是數值也可以是變數
- out:只允許過程內部使用,只能傳遞變數,引用傳遞,外部的資料會被先清空才會進入到內部
- inout:外部可以在內部使用,內部修改也可以在外部使用,引用傳遞,只能傳遞變數
in參數為值傳遞
out參數為引用傳遞,傳遞至過程中,會將傳遞參數的本身值清空
inout參數為引用傳遞
執行個體:
delimiter $$ create procedure pro2(in int_1 int,out int_2 int,inout int_3 int) begin -- 查看三個變數 select int_1,int_2,int_3; end $$ delimiter ;
delimiter $$ create procedure pro3(in int_1 int,out int_2 int,inout int_3 int) begin -- 查看三個局部變數; select int_1,int_2,int_3; -- 修改三個局部變數; set int_1 = 10; set int_2 = 100; set int_3 = 1000; -- 查看三個局部變數 select int_1,int_2,int_3; -- 查看三個全域變數 select @int_1,@int_2,@int_3; --修改三個全域變數 set @int_1 = ‘a‘; set @int_2 = ‘b‘; set @int_3 = ‘c‘; --查看三個全域變數 select @int_1,@int_2,@int_3; end $$ delimiter ;
一天一點MySQL複習——預存程序