1. 程式人生 > >撩課-Mysql第19部分儲存過程詳解

撩課-Mysql第19部分儲存過程詳解

學習地址:
撩課-JavaWeb系列1之基礎語法-前端基礎
撩課-JavaWeb系列2之XML
撩課-JavaWeb系列3之MySQL
撩課-JavaWeb系列4之JDBC
撩課-JavaWeb系列5之web伺服器-idea

什麼是儲存過程

一組可程式設計的函式,
是為了完成特定功能的SQL語句集
經編譯建立並儲存在資料庫中,
使用者可通過指定儲存過程的名字
並給定引數(需要時)來呼叫執行。
儲存過程就是具有名字的一段程式碼,
用來完成一個特定的功能。
建立的儲存過程儲存在資料庫的資料字典中

為什麼要用儲存過程

將重複性很高的一些操作,
封裝到一個儲存過程中,簡化了對這些SQL的呼叫
批量處理
統一介面,確保資料的安全
相對於oracle資料庫來說,
MySQL的儲存過程相對功能較弱,
使用較少。

儲存過程的建立和呼叫

DELIMITER $$
它與儲存過程語法無關
DELIMITER語句將標準分隔符 - 分號(;)更改為:$$
因為我們想將儲存過程作為整體傳遞給伺服器
而不是讓mysql工具一次解釋每個語句
告訴mysql直譯器,
該段命令是否已經結束了,
mysql是否可以執行了。
預設情況下,
delimiter是分號;。
在命令列客戶端中,
如果有一行命令以分號結束,
那麼回車後,
mysql將會執行該命令。
但有時候,
不希望MySQL這麼做。
在為可能輸入較多的語句,
且語句中包含有分號。
使用delimiter $$,
這樣只有當$$出現之後,
mysql直譯器才會執行這段語句。

建立儲存過程

CREATE PROCEDURE 名稱()
BEGIN
語句
END $$

呼叫儲存過程
call 名稱();
刪除儲存過程
drop procedure 名稱
儲存過程變數
在儲存過程中宣告一個變數
使用DECLARE語句
DECLARE 變數名 資料型別(大小) DEFAULT 預設值;
可以宣告一個名為total_sale的變數,
資料型別為INT,
預設值為0
DECLARE total_sale INT DEFAULT 0;

宣告共享相同資料型別的兩個或多個變數
DECLARE x, y INT DEFAULT 0;
分配變數值
要為變數分配一個值,可以使用SET語句
SET total_count = 10;


使用SELECT INTO語句將查詢的結果分配給一個變數
SELECT COUNT(*) INTO total_products FROM products
變數的範圍
如果在儲存過程中宣告一個變數,
那麼當達到儲存過程的END語句時,
它將超出範圍,
因此在其它程式碼塊中無法訪問

儲存過程引數:
三種類型:
IN
表示呼叫者向過程傳入值(傳入值可以是字面量或變數)
OUT
表示過程向呼叫者傳出值
INOUT
INOUT引數是IN和OUT引數的組合。

定義引數
create produce name(模式,引數名稱 資料型別(大小))
儲存過程語句:

IF語句
IF expression THEN 
   statements;
END IF;
IF expression THEN
   statements;
ELSE
   else-statements;
END IF;

CASE語句
CASE  case_expression
WHEN when_expression_1 THEN commands
WHEN when_expression_2 THEN commands
 ...
ELSE commands
END CASE;

迴圈
WHILE expression DO
statements
END WHILE
REPEAT
statements;
UNTIL expression
END REPEAT

檢視所有儲存過程
SHOW PROCEDURE STATUS;
檢視指定資料庫中的儲存過程
SHOW PROCEDURE STATUS WHERE db = 'My_test4';
檢視指定儲存過程原始碼
SHOW CREATE PROCEDURE 儲存過程名


如果你想要獲取Xmind思維導圖源件加群:869866610,進群可以獲取以上技術的學習視訊。