MySQL的儲存過程 call

2021-08-29 09:52:51 字數 2000 閱讀 5978

一,解釋:

mysql 儲存過程是從 mysql 5.0 開始增加的新功能。儲存過程的優點有一籮筐。

不過最主要的還是執行效率和sql **封裝

特別是 sql **封裝功能,如果沒有儲存過程,在外部程式訪問資料庫時(例如 php),要組織很多 sql 語句。特別是業務邏輯複雜的時候,一大堆的 sql 和條件夾雜在 php **中,讓人不寒而慄。

現在有了 mysql 儲存過程,業務邏輯可以封裝儲存過程中,這樣不僅容易維護,而且執行效率也高。

二,使用

第一部分:建立乙個簡單的無參的儲存過程**

1 用mysql客戶端登入

2 選擇資料庫

mysql>use test;

3 查詢當前資料庫有哪些儲存過程

mysql>   show procedure status where db='資料庫表名';

# 建立乙個簡單的儲存過程

mysql>   create procedure hi() select 'hello';

# 儲存過程建立完畢,看怎麼呼叫它

mysql>   call hi();

# 顯示結果

mysql> call hi(); +-------+ | hello | +-------+ | hello | +-------+ 1 row in set (0.00 sec)   query ok, 0 rows affected (0.01 sec)

# 乙個簡單的儲存過程就成功了,這只是乙個演示,儲存過程可以一次執行多個sql語句

mysql 建立儲存過程函式 ,函式的基本寫法

create procedure 儲存過程名字()

(   [in|out|inout] 引數 datatype)​

begin

// mysql 邏輯語句(引數自定義)

end

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

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

...declare c int;

if a is null then

set a = 0;

end if;

...end;

​2,注釋是 --   ; mysql 儲存過程的引數不能指定預設值

​3,不能在 mysql 儲存過程中使用 「return」 關鍵字。

set c = a + b;

select c as sum;

end;

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

call pr_no_param();

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

call pr_add(10, null);

參考:

補充

mysql `ifnull` 函式是mysql控制流函式之一,它接受兩個引數,如果不是`null`,則返回第乙個引數。 否則,`ifnull`函式返回第二個引數。

​兩個引數可以是文字值或表示式

​ifnull(expression_1,expression_2);   // 如果`expression_1`不為`null`,則`ifnull`函式返回`expression_1`; 否則返回`expression_2`的結果。

​`ifnull`函式根據使用的上下文返回字串或數字

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