程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 初識MySQL存儲過程

初識MySQL存儲過程

編輯:MySQL綜合教程

初識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$$


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved