MySQL使用儲存過程
阿新 • • 發佈:2020-10-28
儲存過程簡單來說,就是為了以後的使用而儲存的一條或多條MySQL語句的集合。
為什麼使用儲存過程
- 通過把處理封裝在容易使用的單元中,簡化複雜的操作
- 由於不要求反覆建立一系列處理步驟,這保證了資料的完整性。如果所有開發人員和應用程式都使用同一儲存過程,則所使用的程式碼都是相同的。 這一點延伸就是防止錯誤。需要執行的步驟越多,出錯的可能性就越大。防止錯誤保證了資料的一致性。
- 簡化對變動的管理。如果表名、列名或業務邏輯有變化,只需要更改儲存過程的程式碼。使用它的人員甚至不需要這些變化。 這一點的延伸就是安全性。通過儲存過程限制對基礎資料的訪問,減少了資料訛誤的機會。
- 提高效能。因為使用儲存過程比使用單獨的SQL語句要快。
- 存在一些只能用在單個請求中的MySQL元素和特性,儲存過程可以使用他們來編寫功能更強更靈活的程式碼。
使用儲存過程
建立儲存過程
使用 CREATE PROCEDURE
定義儲存過程。如果儲存過程接受引數,它們將在儲存過程名稱括號中列舉出來。BEGIN
和END
語句來限定儲存過程體。
//預設的MySQL命令列分隔符是; "DELIMITER //"告訴命令列實用程式使用"//"作為新的語法結束分隔符。 DELIMITER // CREATE PROCEDURE productpricing() BEGIN SELECT Avg(prod_price) AS priceaverage FROM products; END //
使用
CALL productpricing();
刪除儲存過程
DROP PROCEDURE productpricing;
使用引數
變數:記憶體中一個特定的位置,用來臨時儲存資料,都必須以@開始。
引數的資料型別: 儲存過程的引數允許的資料型別與表中使用的資料型別相同。記錄集是不允許的型別,因此,不能通過一個引數返回多個行和列。
OUT
指出相應的引數用來從儲存過程傳出一個值(返回給呼叫者),IN
(傳遞給儲存過程),INOUT
(對儲存過程傳入傳出)
通過關鍵字INTO
將查詢結果儲存到相應的變數。
//定義帶引數的儲存過程 DELIMITER // CREATE PROCEDURE productpricing( OUT pl decimal(8,2), OUT ph decimal(8,2), OUT pa decimal(8,2) ) BEGIN SELECT Min(prod_price) INTO pl FROM products; SELECT Max(prod_price) INTO ph FROM products; SELECT Avg(prod_price) INTO pa FROM products; END // //呼叫帶引數的儲存過程 CALL productpricing(@pricelow, @pricehigh, @priceaverage ); //顯示呼叫結果 SELECT @pricelow,@pricehigh;
DELIMITER //
CREATE PROCEDURE ordertotal(
IN onumber int,
OUT ototal decimal(8,2)
)
BEGIN
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END //
CALL ordertotal(20009,@total);
SELECT @total;
檢查儲存過程
SHOW PROCEDURE STATUS;
檢視所有的儲存過程,可使用LIKE
限制
SHOW PROCEDURE STATUS LIKE 'ordertotal';
//檢視建立此儲存過程的語句
SHOW CREATE PROCEDURE ordertotal;
結果: