1. 程式人生 > >初步瞭解mysql儲存過程

初步瞭解mysql儲存過程

儲存過程使用背景

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)

要求必須傳三個引數,不能多也不能少。