MySQL數據庫的存儲過程

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;
相關文章
相關標籤/搜索