1、存儲過程
一、定義:一組可編程的函數,是爲了完成特定功能的SQL語句集,經編譯建立並保存在數據庫中,用戶可經過指定存儲過程的名字並給定參數(須要時)來調用執行
二、優勢:①將重複性很高的一些操做,封裝到一個存儲過程當中,簡化了對這些SQL的調用
②批量處理:SQL+循環,減小流量,也就是「跑批」
③統一接口,確保數據的安全
三、>存儲過程就是具備名字的一段代碼,用來完成一個特定的功能。
>建立的存儲過程保存在數據庫的數據字典中。
四、基本建立格式數據庫
1 delimiter// -- 將SQL語句的結束標記設置爲// 2 DROP PROCEDURE IF EXISTS testprint; -- 若是存在該名字的存儲過程則刪除 3 CREATE PROCEDURE testprint() -- 建立一個名字爲testprint的存儲過程, -- 括號裏面能夠傳參數:CREATE PROCEDURE mytest(in sid INT,in suid INT) 4 BEGIN -- 代碼部分開始 5 SELECT '你好,成都' as infos; -- 存儲過程的代碼部分 6 END; -- 代碼部分結束 7 // -- 結束標記 8 delimiter; -- 編寫編譯結束後將SQL語句的結束標記還原
五、調用編程
-- 調用無參存儲過程 CALL testprint(); -- 調用有參數的存儲過程 set @stuid = 1; SET @subid = 1; CALL mytest(@stuid,@subid);
六、存儲過程的參數
存儲過程能夠有0個或多個參數,用於存儲過程的定義。
3種參數類型:
IN輸入參數:表示調用者向過程傳入值(傳入值能夠是字面量或變量)
OUT輸出參數:表示過程向調用者傳出值(能夠返回多個值)(傳出值只能是變量)
INOUT輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變量)
建議:>輸入值使用in參數;
>返回值使用out參數;
>inout參數就儘可能的少用。
例子:
1)、傳入學生和科目id ,獲得該學生該科目的成績安全
1 delimiter $$ 2 DROP PROCEDURE IF EXISTS mytest; 3 CREATE PROCEDURE mytest(in sid INT,in suid INT) 4 BEGIN 5 UPDATE score SET score.scscore=scscore+5 6 WHERE score.sid = sid AND score.suid = suid; 7 END; 8 $$ 9 delimiter; 10 11 set @stuid = 1; 12 SET @subid = 1; 13 CALL mytest(@stuid,@subid);
2)、-- 傳入學生序號,獲取顯示該學生的姓名函數
1 delimiter $$ 2 DROP PROCEDURE IF EXISTS getstuname; 3 CREATE PROCEDURE getstuname(in sid INT,out stuname VARCHAR(100)) 4 BEGIN 5 SELECT student.sname into stuname FROM student WHERE student.sid = sid; 6 END; 7 $$ 8 delimiter; 9 10 set @stuid = 2; 11 CALL getstuname(@stuid,@stuname); 12 SELECT @stuid as sid,@stuname AS stuname;