MySQL儲存過程詳解之一

2021-06-01 21:18:09 字數 3767 閱讀 2254

儲存過程簡介

乙個儲存過程是乙個可程式設計的函式,它在資料庫中建立並儲存。它可以有sql語句和一些特殊的控制結構組成。當希望在不同的應用程式或平台上執行相同的函式,或者封裝特定功能時,儲存過程是非常有用的。資料庫中的儲存過程可以看做是對程式設計中物件導向方法的模擬。它允許控制資料的訪問方式。

儲存的優點有如下幾點:

1.儲存過程增強了sql語言的功能和靈活性。

2.儲存過程允許標準元件是程式設計。

3.儲存過程能實現較快的執行速度。 4.

儲存過程能過減少網路流量。

5.儲存過程可被作為一種安全機制來充分利用。

mysql儲存過程的建立

1.格式

mysql儲存過程建立格式:

create procedure 過程名 ([過程引數[,...]])   procedure [特性 ...] 過程體

舉例如下:

mysql> delimiter //  

mysql> create procedure proc1(out s int)

-> begin

-> select count(*) into s from user;

-> end

-> //

mysql> delimiter ;

注意:

1.delimiter //和delimiter ;兩句,delimiter是分割符的意思,因為mysql預設以";"為分隔符,如果我們沒有宣告分割符,那麼編譯器會把儲存過程當成sql語句進行處理,則儲存過程的編譯過程會報錯,所以要事先用delimiter關鍵字申明當前段分隔符,這樣mysql才會將";"當做儲存過程中的**,不會執行這些**,用完了之後要把分隔符還原。

2.儲存過程根據需要可能會有輸入、輸出、輸入輸出引數,這裡有乙個輸出引數s,型別是int型,如果有多個引數用","分割開。

3.過程體的開始與結束使用begin與end進行標識。

2.引數

mysql儲存過程的引數用在儲存過程的定義,共有三種引數型別,in,out,inout,形式如:

create procedure([[in |out |inout ] 引數名資料類形...])

in 輸入引數:表示該引數的值必須在呼叫儲存過程時指定,在儲存過程中修改該引數的值不能被返回,為預設值

out 輸出引數:該值可在儲存過程內部被改變,並可返回

inout 輸入輸出引數:呼叫時指定,並且可被改變和返回

in引數例子:

建立:

mysql > delimiter //  

mysql > create procedure demo_in_parameter(in p_in int)

-> begin

-> select p_in; /*查詢輸入引數*/

-> set p_in=2; /*修改*/

-> select p_in; /*檢視修改後的值*/

-> end;

-> //

mysql > delimiter ;

執行結果:

mysql > set @p_in=1;  

mysql > call demo_in_parameter(@p_in);

+------+

| p_in |

+------+

| 1 |

+------+

+------+

| p_in |

+------+

| 2 |

+------+

mysql> select @p_in;

+-------+

| @p_in |

+-------+

| 1 |

+-------+

以上可以看出,p_in雖然在儲存過程中被修改,但並不影響@p_id的值

out引數例子:

建立:

mysql > delimiter //  

mysql > create procedure demo_out_parameter(out p_out int)

-> begin

-> select p_out;

-> set p_out=2;

-> select p_out;

-> end;

-> //

mysql > delimiter ;

執行結果:

mysql > set @p_out=1;  

mysql > call sp_demo_out_parameter(@p_out);

+-------+

| p_out |

+-------+

| null |

+-------+

+-------+

| p_out |

+-------+

| 2 |

+-------+

+-------+

| p_out |

+-------+

| 2 |

+-------+

inout引數例子:

建立;

mysql > delimiter //   

mysql > create procedure demo_inout_parameter(inout p_inout int)

-> begin

-> select p_inout;

-> set p_inout=2;

-> select p_inout;

-> end;

-> //

mysql > delimiter ;

執行:

mysql > set @p_inout=1;  

mysql > call demo_inout_parameter(@p_inout) ;

+---------+

| p_inout |

+---------+

| 1 |

+---------+

+---------+

| p_inout |

+---------+

| 2 |

+---------+

+----------+

| @p_inout |

+----------+

| 2 |

+----------+

MySQL儲存過程詳解 mysql 儲存過程

儲存過程簡介 我們常用的運算元據庫語言sql語句在執行的時候需要要先編譯,然後執行,而儲存過程 stored procedure 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫執行它。乙個儲存過程是乙個可程式設計的...

MySql儲存過程詳解

sql語句需要先編譯然後執行,而儲存過程是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫它。儲存過程是可程式設計的函式,在資料庫中建立並儲存,可以由sql語句和控制結構組成。當想要在不同的應用程式或平台上執行相同的函...

MySQL儲存過程詳解

我們常用的運算元據庫語言sql語句在執行的時候需要要先編譯,然後執行,而儲存過程 stored procedure 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數 如果該儲存過程帶有引數 來呼叫執行它。乙個儲存過程是乙個可程式設計的函式,它在資料...