初識MySQL存儲過程

存儲過程(Stored Procedure)是一組爲了完成特定功能的SQL語句集,經編譯後存儲在數據庫中,用戶通過指定存儲過程的名字並給定參數(如果該存儲過程帶有參數)來調用執行它。
MySQL 存儲過程是從 MySQL 5.0 開始增加的新功能。大大提高數據庫的處理速度,同時也可以提高數據庫編程的靈活性。
過程:封裝起來的若干條語句,調用時這些封裝體執行。把此過程存儲到數據庫中即存儲過程.
函數:是一個有返回值的“過程”。
過程:沒有返回值的函數。
存儲過程的優點:
1、存儲過程增強了SQL語言的功能和靈活性(可以SQL編程,能使用變量,表達式、控制結構體)
2、存儲過程能實現較快的執行速度。(存儲過程要比批處理的執行速度快很多,因爲存儲過程是預編譯的。在首次運行一個存儲過程時查詢,優化器對其進行分析優化,並且給出最終被存儲在系統表中的執行計劃。而批處理的Transaction-SQL語句在每次運行時都要進行編譯和優化,速度相對要慢一些。
3、存儲過程能過減少網絡流量。針對同一個數據庫對象的操作(如查詢、修改),如果這一操作所涉及的Transaction-SQL語句被組織程存儲過程,那麼當在客戶計算機上調用該存儲過程時,網絡中傳送的只是該調用語句,從而大大增加了網絡流量並降低了網絡負載。
4、存儲過程可被作爲一種安全機制來充分利用。系統管理員通過執行某一存儲過程的權限進行限制,能夠實現對相應的數據的訪問權限的限制,避免了非授權用戶對數據的訪問,保證了數據的安全。
5、存儲過程允許標準組件是編程。存儲過程被創建後,可以在程序中被多次調用,而不必重新編寫該存儲過程的SQL語句。而且數據庫專業人員可以隨時對存儲過程進行修改,對應用程序源代碼毫無影響。
存儲過程的創建:
DELIMITER $$  //定義分隔符
CREATE PROCEDURE p()   //p爲過程名
BEGIN
  --sql語句 //封裝語句體
END $$
查看已有的存儲過程:show procedure status \G;
調用存儲過程:call 存儲過程名稱();
刪除存儲過程:drop procedure 存儲過程名稱;

變量聲明:存儲過程中用declare聲明變量
格式:declare 變量名 變量類型 [default 默認值]
存儲過程中,變量可以在SQL語句中合法的運算,如+ - * /
運算結果如何賦值  set 變量 := 表達式
存儲過程傳參:存儲過程的括號裏,可以聲明參數。 語法是 create procedure p([in/out/inout] 參數名  參數類型 ..)
in  out  inout詳細分析見下一篇博文(鏈接明天給出) 

實例一:創建 運算 賦值
CREATE PROCEDURE p1()
BEGIN
  DECLARE age INT DEFAULT 18;
  DECLARE height INT DEFAULT 180;
  SET age := age +20;
  SELECT CONCAT('年齡是', age, '身高是', height);
END$$


實例二 :if/else 控制結構
CREATE PROCEDURE p2()
BEGIN
  DECLARE age INT DEFAULT 18;
  DECLARE height INT DEFAULT 180;
  IF age >= 18 THEN
    SELECT "已成年";
  ELSE
    SELECT "未成年";
  END IF;
END$$


實例三:while/do 控制結構
求1-100的和
CREATE PROCEDURE p3()
BEGIN
  DECLARE total INT DEFAULT 0;
  DECLARE num INT DEFAULT 0;
  WHILE num<=100 DO
    SET total := num + total;
    SET num := num + 1;
   END WHILE;
   SELECT total;
END$$

實例四:case 控制結構
CREATE PROCEDURE p4()
BEGIN
  DECLARE num INT DEFAULT 0;
  SET num := FLOOR(4*RAND());
  CASE num
  WHEN 1 THEN SELECT "cat";
  WHEN 2 THEN SELECT "dog";
  WHEN 3 THEN SELECT "sheep";
  ELSE SELECT "pig";
  END CASE;
END$$


實例五:repeat循環
CREATE PROCEDURE p5()
BEGIN
  DECLARE num INT DEFAULT 0;
  DECLARE total INT DEFAULT 0;
  REPEAT
    SET total = num + total;
    SET num := num + 1;
  UNTIL num>100 END REPEAT;
  SELECT total;
END$$


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章