初步瞭解mysql儲存過程
阿新 • • 發佈:2018-12-13
儲存過程使用背景
mysql5以上的版本增加了對儲存過程的支援
通常情況我們使用的sql語句是一條語句對一個表或多個表的操作,但有些操作需要多條sql語句才能完成,我們就需要用到儲存過程。
什麼是儲存過程
儲存過程大概可以這樣簡述:儲存過程是為了方便以後使用而儲存的一條或多條sql語句的集合。
使用儲存過程的優勢:簡單,安全,高效能
簡單:簡化了複雜的操作
安全:封裝多條sql在一個集合中,多個人使用同個儲存過程不會出現問題,如果不使用儲存過程就需要每個人編寫多條sql去處理同一件事,因為sql不同很可能會產生錯誤。
高效能:儲存過程的效能比單條sql的效能更高。
如果建立一個儲存過程
CREATE PROCEDURE product()
BEGIN
SELECT * FROM table;
END;
以上為一個簡單的儲存過程的建立語法, CREATE PROCEDURE + 儲存過程名
BEGIN 與 END 代表sql的結束與開始,代表一個儲存體。
以上的儲存過程不會返回任何資訊,即使它的儲存體中包含的是SELECT語句,因為這段程式碼是用來建立儲存過程的。
如何使用一個儲存過程
使用CALL關鍵字來使用一個儲存過程,例如上面我們建立的儲存過程,product()。
如果要使用,正確的呼叫語法是(即使不需要傳參也要把後面的括號寫上,代表一個函式):
CALL product();
錯誤的呼叫語法:
CALL product;
如何刪除一個儲存過程
類似於刪除表或刪除檢視那樣可以通過DROP關鍵字來刪除一個儲存過程。
DROP PROCEDURE prodecut IF EXISTS;
建立一個帶有變數的儲存過程
CREATE PRODEDURE producting( OUT pl DECIMAL(8,2), OUT ph DECIMAL(8,2), OUT pa DECIMAL(8,2) ) BEGIN SELECT Min(prod_price) INTO pl FROM product; SELECT Max(prod_price) INTO ph FROM product; SELECT Avg(prod_price) INTO pa FROM product; END;
關鍵字OUT用來指出相應的引數用來從儲存過程傳輸給呼叫者
關鍵字IN是從呼叫者傳輸給儲存過程。
想要呼叫這個儲存過程必須指定三個引數,可以這樣呼叫:
CALL PROCEDURE producting(@pricemin,@pricemax,@priceaverage)
要求必須傳三個引數,不能多也不能少。