MySQL存儲過程(最全最通透)

什麼是mysql存儲過程,什麼時候需要用到存儲過程?

簡單的說就是用sql語句的方式實現可編程的函數,然後保存到數據庫的數據字典中,通常針對需要批量處理或者重複性比較高的業務封裝到存儲過程中,然後只需調用既可。

一、創建存儲過程

首先存儲過程開頭需要 DELIMITER 【自定義結束符】也可以說是:重置結束符

爲什麼必須首先加上 DELIMITER //
通常情況下我們是以分號結束,MySQL就會執行該命令,但有時候,不希望MySQL這麼做。在可能輸入較多的語句,且語句中包含分號。使用DELIMITER // 後當我們碰到自己自定義的結束符,MySQL解釋器才執行這語句。

(嘗試去讀代碼纔是學習編程的最好的方式

代碼實例

DELIMITER //  --重置結束符號
CREATE PROCEDURE select_test()	--聲明存儲過程:
BEGIN	--BEGIN 開始
SElECT * FROM test;	--中間是放函數體	
END //;	-- END 結束

CALL select_test()	--CALL+過程名 調用存儲過程

運行結果
在這裏插入圖片描述

二、查看和刪除存儲過程

創建了存儲過程並不會因爲你關了數據庫而消失,它會保存到數據庫的數據字典中,下次依然可以直接調用

--查看所有存儲過程
SHOW PROCEDURE STATUS;	
--查看指定存儲過程
SHOW PROCEDURE STATUS WHERE name='select_test';	
--查看指定存儲過程的源代碼
SHOW CREATE PROCEDURE select_test;

運行結果(查看所有存儲過程)
在這裏插入圖片描述
運行結果(查看指定存儲過程)
在這裏插入圖片描述
運行結果(查看指定存儲過程的源代碼)
在這裏插入圖片描述
刪除存儲過程

--刪除存儲過程
DROP PROCEDURE select_test;	
--刪除後查看該存儲過程
SHOW PROCEDURE STATUS WHERE name = 'select_test';

運行結果(刪除後)
在這裏插入圖片描述

三、聲明變量、賦值變量和查詢變量

DECLARE 【變量名】關鍵字聲明變量

DELIMITER //
CREATE PROCEDURE test()	
BEGIN
--聲明一個varchar類型的變量
DECLARE result VARCHAR(2); 
--聲明兩個int類型的變量
DECLARE x,y int(3);
--給變量定義值需要用set
set x = 666;set y = 888;
--查詢變量用SELECT 
SELECT x;
--根據條件查詢數據後用 INTO 賦值給result變量
SELECT name INTO result FROM test WHERE name="李四";
--查詢result變量結果
SELECT result;
END//

CALL test();

運行結果(有兩個,因爲查詢了兩次)
在這裏插入圖片描述在這裏插入圖片描述

四、存儲過程傳參

分別有三個IN、OUT、INOUT

IN——傳入值

DELIMITER //
--IN用來定義傳遞的形參,然後通過調用傳遞實參來執行函數
CREATE PROCEDURE test2(IN X varchar(255))
BEGIN
SELECT * FROM test WHERE name = X;
END	//

CALL test2('李四');

在這裏插入圖片描述
OUT——傳出值

DELIMITER //
CREATE PROCEDURE test2(IN X varchar(2),OUT Y int)
BEGIN
SELECT salary INTO Y FROM test WHERE name = X;
END	//

--調用存儲過程中定義OUT變量用@,
--就可以使用定義後的變量
CALL test2('李四',@Y);	
--將存儲過程裏的值給了Y後,定義變量後就可以使用該變量
SELECT @Y

運行結果
在這裏插入圖片描述

INOUT——IN和OUT的組合,可傳入又傳出

DELIMITER //
CREATE PROCEDURE test3(INOUT X int,IN Y int)
BEGIN
set X = X + Y;
END	//

set @X = 10;
CALL test3(@X,10);
SELECT @X;

運行結果
在這裏插入圖片描述

最後
除了存儲過程還有一個是跟存儲過程很相似的自定義函數,但是它們是有區別的,下回就講講吧

我的公衆號和CSDN賬號,名字也都是:一顆剽悍的種子,編程相關博文目前都只在CSDN發佈,並沒有在其他平臺發佈,最近我看到我的幾篇原創博文被其他人抄襲到其他網站,標題名和內容一模一樣,雖然目前我的博文還不多,但是我爲這種行爲感到可恥,同時希望大家請勿抄襲,支持原創,共同維護這個社區。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章