mysql儲存過程跑批 mysql如何建立儲存過程

2021-10-19 19:23:31 字數 3171 閱讀 8166

儲存過程(stored procedure):一組可程式設計的函式,是為了完成特定功能的sql語句集,經編譯建立並儲存在資料庫中,使用者可通過指定儲存過程的名字並給定引數(需要時)來呼叫執行。

優點(為什麼要用儲存過程?):

①將重複性很高的一些操作,封裝到乙個儲存過程中,簡化了對這些sql的呼叫

②批量處理:sql+迴圈,減少流量,也就是「跑批」

③統一介面,確保資料的安全

相對於oracle資料庫來說,mysql的儲存過程相對功能較弱,使用較少。

一、儲存過程的建立和呼叫

>儲存過程就是具有名字的一段**,用來完成乙個特定的功能。

>建立的儲存過程儲存在資料庫的資料字典中。

1、建立儲存過程create [definer = ] procedure sp_name ([proc_parameter[,...]]) [characteristic ...] routine_bodyproc_parameter: [ in | out | inout ] param_name typecharacteristic: comment 'string' | language sql | [not] deterministic | | sql security routine_body:  valid sql routine statement[begin_label:] begin  [statement_list]    ……end [end_label]

#建立資料庫,備份資料表用於示例操作mysql> create database db1;mysql> use db1; mysql> create table players as select * from tennis.players;mysql> create table matches as select * from tennis.matches;

示例:建立乙個儲存過程,刪除給定球員參加的所有比賽mysql> delimiter $$  #將語句的結束符號從分號;臨時改為兩個$$(可以是自定義)mysql> create procedure delete_matches(in p_playerno integer) -> begin ->   delete from matches -> where playerno = p_playerno; -> end$$query ok, 0 rows affected (0.01 sec)mysql> delimiter ;  #將語句的結束符號恢復為分號

解析:預設情況下,儲存過程和預設資料庫相關聯,如果想指定儲存過程建立在某個特定的資料庫下,那麼在過程名前面加資料庫名做字首;

在定義過程時,使用delimiter $$ 命令將語句的結束符號從分號 ; 臨時改為兩個$$,使得過程體中使用的分號被直接傳遞到伺服器,而不會被客戶端(如mysql)解釋。

二、儲存過程的引數

儲存過程可以有0個或多個引數,用於儲存過程的定義。

3種引數型別:

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

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

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

1、in輸入引數mysql> delimiter $$mysql> create procedure in_param(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 in_param(@p_in);+------+| p_in |+------+| 1 |+------++------+| p_in |+------+| 2 |+------+mysql> select @p_in;+-------+| @p_in |+-------+| 1 |+-------+

#以上可以看出,p_in在儲存過程中被修改,但並不影響@p_id的值,因為前者為區域性變數、後者為全域性變數。

2、out輸出引數mysql> delimiter //mysql> create procedure out_param(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 out_param(@p_out);+-------+| p_out |+-------+| null |+-------+  #因為out是向呼叫者輸出引數,不接收輸入的引數,所以儲存過程裡的p_out為null+-------+| p_out |+-------+| 2 |+-------+mysql> select @p_out;+--------+| @p_out |+--------+| 2 |+--------+  #呼叫了out_param儲存過程,輸出引數,改變了p_out變數的值

3、inout輸入引數mysql> delimiter $$mysql> create procedure inout_param(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 inout_param(@p_inout);+---------+| p_inout |+---------+| 1 |+---------++---------+| p_inout |+---------+| 2 |+---------+mysql> select @p_inout;+----------+| @p_inout |+----------+| 2 |+----------+

#呼叫了inout_param儲存過程,接受了輸入的引數,也輸出引數,改變了變數

注意:①如果過程沒有引數,也必須在過程名後面寫上小括號

例:create procedure sp_name ([proc_parameter[,...]]) ……

②確保引數的名字不等於列的名字,否則在過程體中,引數名被當做列名來處理

強烈建議:

>輸入值使用in引數;

>返回值使用out引數;

>inout引數就盡量的少用。

Mysq 儲存過程

drop procedure if exists xl 建立儲存過程 delimiter 轉譯字元 使用 代替 create procedure xl begin select from fd car report end delimiter 轉譯字元 使用 代替 call xl 呼叫儲存過程 de...

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...