MySQL儲存過程

2021-09-25 16:26:03 字數 3799 閱讀 6352

mysql儲存過程

​ 儲存過程和函式是事先經過編譯並儲存在資料庫中的一段sql語句的集合,呼叫儲存過程和函式可以簡化很多任務作,減少資料在資料庫和應用伺服器之間的傳輸,提高資料處理效率。

​ 儲存過程和函式的區別在於函式必須有返回值,儲存過程沒有,儲存過程的引數可以使用in、out、inout型別,而函式的引數只能是in型別的。

**********==定義儲存過程**********=

create procedure 過程名 (引數1,引數2)

[儲存過程選項]

begin

sql語句:

end**********=呼叫儲存過程**********==

call 過程名(引數1,引數2);

儲存過程選項

簡要說明

delimiter

修改執行符號

language sql

說明下面過程使用sql編寫,這條也是系統預設的

[not]deterministic

deterministic確定的,即每次輸入一樣輸出也一樣的程式。

not deterministic

contains sql 表示子程式不包含讀或寫資料的語句。

no sql表示子程式不包含sql語句。

reads sql data表示子程式包含讀資料的語句。

modified sql data表示子程式包含寫資料的語句。

預設使用的值是contains sql

sql security

用來指定是使用建立該子程式的許可執行,還是呼叫者的許可來執行

comment 『string』

注釋資訊

mysql> select * from student;

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

| id | name | gender |

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

| 1 | bob | m |

| 2 | alice | f |

| 3 | john | f |

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

3 rows in set (0.00 sec)

mysql> delimiter $$

mysql> create procedure choose()

-> reads sql data

-> begin

-> select id from student;

-> end

-> $$

query ok, 0 rows affected (0.00 sec)

mysql> delimiter ;

###呼叫過程

mysql> call choose();

+------+

| id |

+------+

| 1 |

| 2 |

| 3 |

+------+

3 rows in set (0.00 sec)

query ok, 0 rows affected (0.00 sec)

**********===儲存過程引數傳遞***************

mysql> delimiter $$

mysql> create procedure getinformation(in b int)

-> begin

-> select * from student where id=b;

-> end

-> $$

query ok, 0 rows affected (0.00 sec)

mysql> call getinformation (2)$$

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

| id | name | gender |

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

| 2 | alice | f |

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

1 row in set (0.00 sec)

query ok, 0 rows affected (0.00 sec)

******************************

mysql> delimiter $$

mysql> create procedure demo(out str varchar(200))

-> begin

-> select name into str from student where id=2;

-> end

-> $$

query ok, 0 rows affected (0.00 sec)

mysql> call demo(@a)$$

mysql> select @a$$

+-------+

| @a |

+-------+

| alice |

+-------+

1 row in set (0.00 sec)

show procedure status like 'sp_name'

***************===檢視狀態***************

mysql> show procedure status like 'demo'\g

*************************** 1. row ***************************

db: student

name: demo

type: procedure

definer: root@localhost

modified: 2019-07-29 11:28:00

created: 2019-07-29 11:28:00

security_type: definer

comment:

character_set_client: utf8

collation_connection: utf8_general_ci

database collation: latin1_swedish_ci

1 row in set (0.00 sec)

***************===檢視儲存過程定義***************

show create procedure sp_name

mysql> show create procedure demo\g

*************************** 1. row ***************************

procedure: demo

sql_mode:

create procedure: create definer=`root`@`localhost` procedure `demo`(out str varchar(200))

begin

select name into str from student where id=2;

endcharacter_set_client: utf8

collation_connection: utf8_general_ci

database collation: latin1_swedish_ci

1 row in set (0.01 sec)

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