MySQL存儲過程

 

 

 

 

 

——MySQL存儲過程
一、MySQL執行語句過程:SQL語句—>MySQL引擎—>語法分析—>編譯爲可識別命令—>執行命令—>輸出返回值—>客戶端
二、存儲過程是一種預編譯,將結果存儲在內存中,只有在第一次時會分析和執行,在以後直接調用相應的結果便可,效率更快,而且能夠返回多個值
三、存儲過程的優勢:
(1)加強了SQL語句的功能和靈活性
(2)實現較快的執行速度
(3)減小網絡流量
四、建立不帶參數的存儲過程:
create procedure sp1() select version();
call sp1;調用存儲過程(不帶參數)
call sp1();調用存儲過程(不帶參數)
+------------+
| version() |
+------------+
| 5.6.47-log |
+------------+
五、建立帶有in類型參數的存儲過程,不沒有返回過程:
create procedure removeuserbyid(in id int unsigned)
-> begin
-> delete from user where id=id;注意id傳入參數和表中字段不能相同,否則將刪除全部記錄,而非原本id記錄
-> end
-> //
以上方式不正確,下面是正確方式
delimiter //
create procedure remove(in id1 int unsigned)
-> begin
-> delete from test1 where id=id1;
-> end
-> //
call remove(2) 刪除id爲2的記錄
六、建立帶有in和out的存儲過程,帶返回變量,其中返回變量可使用用@num能夠表示
delimiter //
create procedure remove1(in pid int unsigned,out usernum int unsigned)
-> begin
-> delete from test1 where id =pid;
-> select count(id) from test1 into usernum;
-> end
-> //
刪除id記錄以後,返回剩餘數據表記錄總數
call remove1(2,@nums)//
select @nums
七、begin end 之間的變量屬於局部變量,而set @i=7稱之爲用戶變量
八、select row_count();是指輸出影響的記錄數
九、建立多個out參數的存儲過程
delimi//
create procedure remove2(in age1 smallint unsigned ,out deletenum smallint unsigned ,out usercounts smallint unsigned)
-> begin
-> delete from test1 where age=age1;
-> select row_count() into deletenum;
-> select count(id) from test1 into usercounts;
-> end
-> //
call remove2(22,@i,@j)// 調用存儲過程
select @i,@j// 輸出多個out返回值
十、存儲過程和自定義函數的區別
(1)存儲過程功能更加複雜一些,而函數針對性更強
(2)存儲過程能夠返回多個值,而函數只能夠有一個返回值
(3)存儲過程通常獨立來執行,而函數能夠做爲其餘SQL語句組成部分來出現
十一、存儲過程修改不了過程體,如要修改,則先刪除再從新建立網絡

相關文章
相關標籤/搜索