mysql儲存過程

2021-09-01 11:08:49 字數 3150 閱讀 6563

我們大家都知道mysql 儲存過程是從 mysql 5.0 開始逐漸增加新的功能。儲存過程在實際應用中也是優點大於缺點。不過最主要的還是執行效率和sql **封裝。特別是 sql **封裝功能,如果沒有儲存過程。

在外部程式訪問資料庫時(例如 php),要組織很多 sql 語句。

特別是業務邏輯複雜的時候,一大堆的 sql 和條件夾雜在 php **中,讓人不寒而慄。現在有了 mysql 儲存過程,業務邏輯可以封裝儲存過程中,這樣不僅容易維護,而且執行效率也高。

一、mysql 建立儲存過程

「pr_add」 是個簡單的 mysql 儲存過程,這個mysql 儲存過程有兩個 int 型別的輸入引數 「a」、「b」,返回這兩個引數的和。

drop procedure if exists pr_add;  

計算兩個數之和

create procedure pr_add   

(   

a int,   

b int   

)   

begin   

declare c int;   

if a is null then   

set a= 

0;   

end if;   

if b is null then   

set b= 

0;   

end if;   

set c= 

a+ b;   

select c as sum;   

/*   

return c;  

不能在 mysql 儲存過程中使用。return 只能出現在函式中。

*/   

end;  

二、呼叫 mysql 儲存過程

call pr_add(10, 20);  

執行 mysql 儲存過程,儲存過程引數為 mysql 使用者變數。

set @a= 

10;   

set @b= 

20;   

call pr_add(@a, @b);  

三、mysql 儲存過程特點

建立 mysql 儲存過程的簡單語法為:

create procedure 儲存過程名字()   

(   

[in|out|inout] 引數 datatype   

)   

begin   

mysql 語句;   

end;  

mysql 儲存過程引數如果不顯式指定「in」、「out」、「inout」,則預設為「in」。習慣上,對於是「in」 的引數,我們都不會顯式指定。

1. mysql 儲存過程名字後面的「()」是必須的,即使沒有乙個引數,也需要「()」

2. mysql 儲存過程引數,不能在引數名稱前加「@」,如:「@a int」。下面的建立儲存過程語法在 mysql 中是錯誤的(在 sql server 中是正確的)。 mysql 儲存過程中的變數,不需要在變數名字前加「@」,雖然 mysql 客戶端使用者變數要加個「@」。

create procedure pr_add   

(   

@a int, -- 錯誤   

b int -- 正確   

)  3. mysql 儲存過程的引數不能指定預設值。

4. mysql 儲存過程不需要在 procedure body 前面加 「as」。而 sql server 儲存過程必須加 「as」 關鍵字。

create procedure pr_add   

(   

a int,   

b int   

)   

as -- 錯誤,mysql 不需要 「as」   

begin   

mysql statement ...;   

end;  

5. 如果 mysql 儲存過程中包含多條 mysql 語句,則需要 begin end 關鍵字。

create procedure pr_add   

(   

a int,   

b int   

)   

begin   

mysql statement 1 ...;   

mysql statement 2 ...;   

end;  

6. mysql 儲存過程中的每條語句的末尾,都要加上分號 「;」

...   

declare c int;   

if a is null then   

set a= 

0;   

end if;   

...   

end;  

7. mysql 儲存過程中的注釋。

/*   

這是個   

多行 mysql 注釋。   

*/   

declare c int; -- 這是單行 mysql 注釋 (注意 -- 後至少要有乙個空格)   

if a is null then # 這也是個單行 mysql 注釋   

set a= 

0;   

end if;   

...   

end;  

8. 不能在 mysql 儲存過程中使用 「return」 關鍵字。

set c= 

a+ b;   

select c as sum;   

/*   

return c; -- 不能在 mysql 儲存過程中使用。return 只能出現在函式中。   

*/   

end;  

9. 呼叫 mysql 儲存過程時候,需要在過程名字後面加「()」,即使沒有乙個引數,也需要「()」

call pr_no_param();  

10. 因為 mysql 儲存過程引數沒有預設值,所以在呼叫 mysql 儲存過程時候,不能省略引數。可以用 null 來替代。

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...

mysql 儲存過程 MySQL儲存過程

目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...