mysql 存储过程 set into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法...
本文實(shí)例講述了mysql存儲(chǔ)過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET)操作方法。分享給大家供大家參考,具體如下:
存儲(chǔ)過程創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)
這個(gè)咱就不說什么定義啦術(shù)語啦啥的,直接看著實(shí)例來慢慢熟悉它。完事呢,咱們來創(chuàng)建一個(gè)名為GetAllProducts()的簡(jiǎn)單存儲(chǔ)過程哈,這個(gè)GetAllProducts()存儲(chǔ)過程呢,主要是用來從products表中選擇所有產(chǎn)品。咱們來啟動(dòng) mysql 客戶端工具并鍵入以下命令:
DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT * FROM products;
END //
DELIMITER ;
咱們來詳細(xì)看下上面的sql哈:
第一個(gè)命令是DELIMITER //,它與存儲(chǔ)過程語法無關(guān)。 DELIMITER語句將標(biāo)準(zhǔn)分隔符 - 分號(hào)(;)更改為://。 在這種情況下,分隔符從分號(hào)(;)更改為雙斜杠//。為什么我們必須更改分隔符? 因?yàn)槲覀兿雽⒋鎯?chǔ)過程作為整體傳遞給服務(wù)器,而不是讓mysql工具一次解釋每個(gè)語句。 在END關(guān)鍵字之后,使用分隔符//來指示存儲(chǔ)過程的結(jié)束。 最后一個(gè)命令(DELIMITER;)將分隔符更改回分號(hào)(;)。
使用CREATE PROCEDURE語句創(chuàng)建一個(gè)新的存儲(chǔ)過程。在CREATE PROCEDURE語句之后指定存儲(chǔ)過程的名稱。在這個(gè)示例中,存儲(chǔ)過程的名稱為:GetAllProducts,并把括號(hào)放在存儲(chǔ)過程的名字之后。
BEGIN和END之間的部分稱為存儲(chǔ)過程的主體。將聲明性SQL語句放在主體中以處理業(yè)務(wù)邏輯。 在這個(gè)存儲(chǔ)過程中,我們使用一個(gè)簡(jiǎn)單的select查詢來查詢products表中的數(shù)據(jù)。
通過上面的sql,咱們就算是創(chuàng)建了一個(gè)存儲(chǔ)過程了,完事我們就來調(diào)用存儲(chǔ)過程,來看下調(diào)用語法:
CALL STORED_PROCEDURE_NAME();
再來看下調(diào)用GetAllProducts()存儲(chǔ)過程的具體sql:
CALL GetAllProducts();
運(yùn)行上面的sql你就會(huì)看到你在存儲(chǔ)過程中的sql的運(yùn)行結(jié)果了。
變量創(chuàng)建(DECLARE)和賦值(SET)
我們都知道,變量是一個(gè)命名數(shù)據(jù)對(duì)象,變量的值可以在存儲(chǔ)過程執(zhí)行期間更改。我們接下來就嘗試使用存儲(chǔ)過程中的變量來保存直接/間接結(jié)果。 這些變量是存儲(chǔ)過程的本地變量,但是我們得注意,變量必須先聲明后,才能使用它。而我們?nèi)绻诖鎯?chǔ)過程中聲明一個(gè)變量,可以使用DECLARE語句,來看下sql語法:
DECLARE variable_name datatype(size) DEFAULT default_value;
咱們來看下上面的sql具體是什么意思:
首先,在DECLARE關(guān)鍵字后面要指定變量名。變量名必須遵循MySQL表列名稱的命名規(guī)則。
其次,指定變量的數(shù)據(jù)類型及其大小。變量可以有任何mysql數(shù)據(jù)類型,如INT,VARCHAR,DATETIME等。
最后,當(dāng)聲明一個(gè)變量時(shí),它的初始值為NULL。但是可以使用DEFAULT關(guān)鍵字為變量分配默認(rèn)值。
咱們接下來就來聲明一個(gè)名為total_sale的變量,數(shù)據(jù)類型為INT,默認(rèn)值為0。來看下sql:
DECLARE total_sale INT DEFAULT 0;
其中,mysql允許使用單個(gè)DECLARE語句聲明共享相同數(shù)據(jù)類型的兩個(gè)或多個(gè)變量,來看個(gè)sql:
DECLARE x, y INT DEFAULT 0;
在上面的sql中,我們聲明了兩個(gè)整數(shù)變量x和y,并將其默認(rèn)值設(shè)置為0。完事呢,既然變量設(shè)置完了,接下來就該分配值了,我們?nèi)绻獮樽兞糠峙湟粋€(gè)值,可以使用SET語句,來看個(gè)實(shí)例:
DECLARE total_count INT DEFAULT 0;
SET total_count = 10;
在上面的sql語句中,我們分配total_count變量的值為10。完事除了SET語句之外,還可以使用SELECT INTO語句將查詢的結(jié)果分配給一個(gè)變量,來看實(shí)例:
DECLARE total_products INT DEFAULT 0
SELECT COUNT(*) INTO total_products
FROM products
在上面的sql中,我們應(yīng)當(dāng)有如下理解:
首先,聲明一個(gè)名為total_products的變量,并將其值初始化為0。
然后,使用SELECT INTO語句來分配值給total_products變量,從數(shù)據(jù)庫(kù)中的products表中選擇的產(chǎn)品數(shù)量。
我們知道一個(gè)變量有自己的范圍(作用域),它用來定義它的生命周期。 但是如果在存儲(chǔ)過程中聲明一個(gè)變量,那么當(dāng)達(dá)到存儲(chǔ)過程的END語句時(shí),它將超出范圍,因此在其它代碼塊中無法訪問。
我們可以這么理解,如果我們?cè)贐EGIN END塊內(nèi)聲明一個(gè)變量,那么如果達(dá)到END,它將超出范圍。 我們還可以在不同的作用域中聲明具有相同名稱的兩個(gè)或多個(gè)變量,因?yàn)樽兞績(jī)H在自己的作用域中有效。 但是,在不同范圍內(nèi)聲明具有相同名稱的變量不是很好的編程習(xí)慣。其中,以@符號(hào)開頭的變量是會(huì)話變量,直到會(huì)話結(jié)束前它可用和可訪問。
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
總結(jié)
以上是生活随笔為你收集整理的mysql 存储过程 set into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 疫情地图 | 低代码制作全国重点管控地区
- 下一篇: 哪里有mysql认证_国内哪个城市可以考