什么是mysql存儲(chǔ)過(guò)程

mysql中的存儲(chǔ)過(guò)程指的是存儲(chǔ)在數(shù)據(jù)庫(kù)中的SQL語(yǔ)句集合,當(dāng)創(chuàng)建好存儲(chǔ)過(guò)程后在運(yùn)行時(shí)提供所需參數(shù),存儲(chǔ)過(guò)程就可以以代碼指定的方式使用參數(shù)執(zhí)行并返回值

在MySQL中提供了創(chuàng)建存儲(chǔ)過(guò)程的能力。存儲(chǔ)過(guò)程是MySQL以及其他數(shù)據(jù)庫(kù)管理系統(tǒng)中的強(qiáng)大功能。接下來(lái)在文章中將為大家具體介紹MySQL中的存儲(chǔ)過(guò)程,具有一定的參考作用,希望對(duì)大家有所幫助。

什么是mysql存儲(chǔ)過(guò)程

【推薦課程:MySQL教程

存儲(chǔ)過(guò)程:

存儲(chǔ)過(guò)程指的是存儲(chǔ)在數(shù)據(jù)庫(kù)中的SQL語(yǔ)句的集合。存儲(chǔ)過(guò)程它可以包含業(yè)務(wù)邏輯,這是區(qū)分存儲(chǔ)過(guò)程和視圖的關(guān)鍵之一。另外存儲(chǔ)過(guò)程還可以接受參數(shù),我們可以在存儲(chǔ)過(guò)程中設(shè)置變量,寫(xiě)入語(yǔ)句等。

存儲(chǔ)過(guò)程如何工作

首先要先創(chuàng)建一個(gè)存儲(chǔ)過(guò)程然后再運(yùn)行。在運(yùn)行的過(guò)程中需要提供它所需要的參數(shù),然后存儲(chǔ)過(guò)程將以代碼指定的任何方式使用參數(shù)執(zhí)行。例如,編寫(xiě)一個(gè)接受FruitId參數(shù)的存儲(chǔ)過(guò)程。然后在存儲(chǔ)過(guò)程可以獲取該參數(shù)并使用它來(lái)檢查該特定水果的庫(kù)存。因此我們可以調(diào)用存儲(chǔ)過(guò)程,即每次使用不同的水果ID它都將返回一個(gè)值,并顯示該庫(kù)存中有多少水果。

創(chuàng)建存儲(chǔ)過(guò)程

我們可以通過(guò)CREATE PROCEDURE語(yǔ)句創(chuàng)建存儲(chǔ)過(guò)程

CREATE?PROCEDURE?demo_name(p_1?INT) BEGIN ??...code?goes?here... END;

demo_name指的是存儲(chǔ)過(guò)程的名稱(chēng),括號(hào)是必須的,如果里面不包含任何參數(shù)則括號(hào)可以為空

存儲(chǔ)過(guò)程的主體是介于BEGIN和END關(guān)鍵字之間。這些關(guān)鍵字用于編寫(xiě)復(fù)合語(yǔ)句。復(fù)合語(yǔ)句可以包含多個(gè)語(yǔ)句,如果需要,可以嵌套這些語(yǔ)句。

例:創(chuàng)建一個(gè)存儲(chǔ)過(guò)程名為FruitStock:

DELIMITER?//  CREATE?PROCEDURE?FruitStock(thisFruit?SMALLINT) BEGIN 	SELECT? 		Fruit.FruitName,? 		Fruit.Inventory,? 		Units.UnitName 	FROM? 		Fruit?INNER?JOIN?Units?ON 		Fruit.UnitId?=?Units.UnitId 	WHERE? 		Fruit.FruitId?=?thisFruit; END?//  DELIMITER?;

創(chuàng)建好了一個(gè)存儲(chǔ)過(guò)程,接下來(lái)將調(diào)用這個(gè)存儲(chǔ)過(guò)程

調(diào)用一個(gè)參數(shù)為1的ID

CALL?FruitStock(1);

刪除存儲(chǔ)過(guò)程

可以使用DROP PROCEDURE語(yǔ)句刪除存儲(chǔ)過(guò)程。

DROP?PROCEDURE?FruitStock;

改變存儲(chǔ)過(guò)程

在存儲(chǔ)過(guò)程中可通過(guò)下列語(yǔ)句更改存儲(chǔ)過(guò)程ALTER PROCEDURE。

需要注意要更改存儲(chǔ)過(guò)程的主體或其任何參數(shù)時(shí),需要?jiǎng)h除該過(guò)程然后再次創(chuàng)建

例:添加Fruit.FruitId所要返回的列表

DROP?PROCEDURE?IF?EXISTS?FruitStock; DELIMITER?// CREATE?PROCEDURE?FruitStock(thisFruit?SMALLINT) BEGIN 	SELECT? 		Fruit.FruitId,? 		Fruit.FruitName,? 		Fruit.Inventory,? 		Units.UnitName 	FROM? 		Fruit?INNER?JOIN?Units?ON 		Fruit.UnitId?=?Units.UnitId 	WHERE? 		Fruit.FruitId?=?thisFruit; END?//  DELIMITER?;

總結(jié):

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享