MySQL:存儲過程

禁止碼迷,布布扣,豌豆代理,碼農教程,愛碼網等第三方爬蟲網站爬取!
express

目錄編程

  • 存儲過程
  • 存儲過程基操
    • 建立
    • 執行
    • 刪除
  • 使用參數
  • 傳入參數
  • 實例
    • IF 語句
    • 結合選擇結構
  • 檢查存儲過程
  • 參考資料


存儲過程

實際操做中會出現,對於一些操做須要多條語句的配合才能完成。這裏能夠用編程中的順序結構來類比,當我每次須要完成這個操做都須要把完整的 SQL 語句寫一遍,這麼寫不只麻煩,還容易出錯。咱們在編程中是怎麼優化這個問題的?就是將固定操做的代碼塊封裝成一個函數,而後經過參數的傳遞實現函數調用。所謂存儲過程就與編程中的函數有相似之處,是一條或多條 MySQL 語句的集合,也能夠看成是批處理文件。存儲過程的語句編寫會稍微複雜一些,同時也會有權限問題,可是存儲過程的優點仍是很明顯的,在於簡捷、安全、性能好 3 個方面:安全

  1. 封裝一段代碼,使得操做變得簡捷;
  2. 規避了反覆創建某種操做容易出錯的問題,保證了數據的完整性;
  3. 操做的健壯性、移植性加強,修改功能能夠經過修改存儲過程實現;
  4. 存儲過程的執行速度比 SQL 語句更快,使得效率提升;
  5. 存儲過程能夠實現的功能更爲靈活。
存儲過程基操

建立

定義存儲過程要使用 CREATE PROCEDURE 定義,在語句後面要給出存儲過程名,若能夠接受參數就須要在括號內羅列出來。語法框架爲:服務器

CREATE PROCEDURE name(variable1,variable2……)
BEGIN
    --MySQL 語句
END;

建立存儲過程時須要指定哪些變量須要輸入和輸出,用 OUT 關鍵字指定,輸入用 IN 關鍵字指定,若同時須要輸入和輸出,用 INOUT 關鍵字指定。
框架

  • 爲了便於在命令提示符中調試,能夠用如下代碼修改語句的結束符。
DELIMITER //

執行

執行存儲過程的語句爲 CALL name(),若是須要傳參就要在括號之間填充參數。
ide

刪除

存儲過程將在服務器上供調用,咱們能夠把創建的存儲過程刪掉,使用 DROP PROCEDURE 刪除語句實現。

若指定的存儲過程不存在會報錯,能夠使用下列語句實現異常處理。函數

DROP PROCEDURE IF EXISTS
使用參數

在這裏給出 3 個參數,這些參數是此存儲過程所接受的,每一個參數必須指定數據類型,例以下面就使用了十進制數字。OUT 就說明這些參數是須要返回給調用者的,操做完值以後就使用 INTO 將值注入變量之中。而對於存儲過程的運行的代碼就封裝在 BEGIN 和 END 語句以內。

此時用 CALL 語句調用存儲過程後,返回的變量將會被調出來。MySQL 中的變量都是以 @開始的,因爲存儲過程有 3 個參數,所以也必須傳 3 個參數。

這個時候就使用 SELECT 語句依次查看變量。
性能

  • 存儲過程當中的參數的數據類型和表中對應數據的數據類型應當是相同的。同時數據集是不被承認的數據類型,所以不可以使用一個參數集成多個行和列。
傳入參數

建立時須要用關鍵字 IN 指定傳入的參數。

傳參就要按照參數表填寫變量,這個順序不能有錯。

優化

實例

IF 語句

在存儲過程當中引入分支處理的代碼框架爲:網站

IF expression1 THEN 
   --MySQL 語句段
ELSEIF expression2 THEN
   --MySQL 語句段
ELSE
   --MySQL 語句段
END IF;

結合選擇結構


這個實例實現的功能就更強了,那麼這裏解釋一下選擇結構的功能。IF 語句檢查變量是都是真,真的狀況下用一個 SELECT 語句將值注入變量中,若爲假則用另外一個 SELECT 語句將值注入變量。

  • COMMENT關鍵字用於給存儲過程包含一個值,這個值會在檢查語句時被回顯。

如今傳入 2 組參數進去試試看。

檢查存儲過程

使用如下語句能夠檢查建立存儲過程的語句。

SHOW CREATE PROCUDURE name;


如下語句能夠查看存儲過程的建立信息。

SHOW PROCUDURE STATUS LIKE name;

相關文章
相關標籤/搜索