MySQL的儲存過程

2021-10-10 06:51:34 字數 3095 閱讀 1511

我們常用的運算元據庫語言sql語句在執行的時候需要要先編譯,然後執行,而儲存過程(stored procedure)是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。乙個儲存過程是乙個可程式設計的函式,它在資料庫中建立並儲存。它可以有sql語句和一些特殊的控制結構組成。當希望在不同的應用程式或平台上執行相同的函式,或者封裝特定功能時,儲存過程是非常有用的。資料庫中的儲存過程可以看做是對程式設計中物件導向方法的模擬,它允許控制資料的訪問方式

1、執行一次後,會將生成的二進位制**駐留緩衝區(便於下次執行),提高執行效率

2、sql語句加上控制語句的集合,靈活性高

3、在伺服器端儲存,客戶端呼叫時,降低網路負載

4、可多次重複被呼叫,可隨時修改,不影響客戶端呼叫

5、 可完成所有的資料庫操作,也可控制資料庫的資訊訪問許可權

3.1.1、建立基本過程

使用create procedure語句建立儲存過程 。

儲存過程的主體部分,被稱為過程體;以begin開始,以end$$結束

#宣告語句結束符,可以自定義:

delimiter $$

#宣告儲存過程

create procedure 儲存過程名(in 引數名 引數型別)

begin

#定義變數

declare 變數名 變數型別

#變數賦值

set 變數名 = 值

sql 語句1;

sql 語句2;

...end$$

#恢復為原來的語句結束符

delimiter ;(有空格)

呼叫儲存過程:

刪除儲存過程;

3.1.2、儲存過程的引數

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

createprocedure 儲存過程名([[in |out |inout ] 引數名 資料類形…])

in 輸入引數:表示呼叫者向過程傳入值(傳入值可以是字面量或變數)

mysql> delimiter $$

mysql> create procedure tet1

(in in_id int(2

))-> begin

-> select * from stu.a_player where id=in_id;

-> end $$

query ok,

0 rows affected (

0.00 sec)

mysql> delimiter ;

#將3傳遞給in_id變數,執行事務

mysql> call tet1(3

);+--

--+----

-----+

-------

+| id | name | score |+--

--+----

-----+

-------

+|3| zl |80|

+----+

----

-----+

-------

+1 row in set (

0.00 sec)

#將6傳遞給in_id變數,執行事務

mysql> call tet1(6

);+--

--+------+

-------

+| id | name | score |+--

--+------+

-------

+|6| ke |60|

+----+

------+

-------

+1 row in set (

0.00 sec)

out 輸出引數:表示過程向呼叫者傳出值(可以返回多個值)(傳出值只能是變數)

mysql> delimiter $$

mysql> create procedure tet2

(out ab int

)-> begin

-> select ab;

-> set ab=2;

-> select ab;

-> end $$

query ok,

0 rows affected (

0.00 sec)

mysql> delimiter ;

#將@ab變數傳遞給tet2 事務

mysql> call tet2

(@ab);+

------+

| ab |+--

----+|

null|+

------+

#out向呼叫者輸出引數,不接收輸入的引數,所以ab為null

1 row in set (

0.00 sec)+--

----

+| ab |+--

----+|

2|+--

----

+事務將ab變數設定為2(設定的是全域性),則可進行輸出

1 row in set (

0.00 sec)

query ok,

0 rows affected (

0.00 sec)

mysql> select @ab;+--

----

+| @ab |+--

----+|

2|+--

----

+1 row in set (

0.00 sec)

#事務外查詢變數,已經被修改

inout 輸入輸出引數:既表示呼叫者向過程傳入值,又表示過程向呼叫者傳出值(值只能是變數)

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語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...