今天就跟大家聊聊有關(guān)如何進行MySQL存儲,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
為新津縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及新津縣網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站建設(shè)、新津縣網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!一、存儲過程
存儲過程是在大型數(shù)據(jù)庫系統(tǒng)中一組為了完成特定功能的SQL語句集,存儲在數(shù)據(jù)庫中。存儲過程經(jīng)過第一次編譯后,再次調(diào)用不需要編譯,用戶可以通過指定的存儲過程名和給出一些存儲過程定義的參數(shù)來使用它。存儲過程就是為以后使用而保存的一條或多條SQL語句,個人理解跟函數(shù)類似,一般用的較少。
好處:
通過把處理封裝在一個易用的單元中,可以簡化復(fù)雜的操作。
2.不需要反復(fù)建立一系列的處理步驟,因而保證了數(shù)據(jù)的一致性。
3.簡化了對變動的管理,這一點的延伸就是安全性。
4.存儲過程通常以編譯過的形式存儲,所以DBMS處理命令所需的工作量少,提高了性能。
缺點:
1.可移植性差
2.對于簡單的SQL語句,存儲過程沒什么優(yōu)勢
4.如果只有一個用戶使用數(shù)據(jù)庫,那么存儲過程對安全也沒什么影響
5.團隊開發(fā)時需要先統(tǒng)一標準,否則后期維護成本大
6.在大并發(fā)量訪問的情況下,不宜寫過多涉及運算的存儲過程
7.業(yè)務(wù)邏輯復(fù)雜時,特別是涉及到對很大的表進行操作的時候,不如在前端先簡化業(yè)務(wù)邏輯
二、存儲過程語法格式
一般形式
create procedure [過程名]([in|out|inout] [參數(shù)名] [參數(shù)類型],...) begin [SQL語句集;] end
在定義參數(shù)部分時in表示傳入?yún)?shù),讀取外部變量值賦給內(nèi)部參數(shù),但內(nèi)部參數(shù)的作用域僅限存儲過程;out表示傳出參數(shù),將內(nèi)部參數(shù)傳遞到外部變量;inout既有in的功能,又用out的功能,屬于in與out的結(jié)合體。在都不寫的情況下,默認使用in選項
但是,由于SQL語句集部分一樣使用的是分號(;)作為分隔符,所以要在創(chuàng)建存儲過程前使用delimiter重新定義分隔符,并在創(chuàng)建完成后將分隔符還原。delimiter [新分隔符]
完整格式
delimiter [新分隔符] create procedure [過程名]([in|out|inout] [參數(shù)名] [參數(shù)類型],...) begin SQL語句集; end[新分隔符] delimiter;
三、存儲過程創(chuàng)建舉例說明:
1.創(chuàng)建單條SQL存儲過程select_id(),(沒什么實際意義,僅僅舉例)
delimiter // create procedure select_id(inout id_inout int) begin select user_id from user where user_id=id_inout; end// delimiter; ##創(chuàng)建存儲過程select_id()
2.創(chuàng)建好存儲過程select_id()后,會保存在數(shù)據(jù)庫中。如果創(chuàng)同名的存儲過程會報錯,若要創(chuàng)建相同名稱的存儲過程,需要刪除后方可創(chuàng)建。
PROCEDURE select_id already exists
創(chuàng)建多條SQL存儲過程select_ids()
delimiter $$ create procedure select_ids() begin select user_id from user; select customer_id from user; end$$ delimiter;
四、調(diào)用存儲過程
調(diào)用存儲過程很簡單,call [過程名](@[外部參數(shù)名],.
調(diào)用select_id()
set@user_id=62356; call select_id(@user_id); 或者 call select_id(62356)
調(diào)用select_ids()
call select_ids();
五、查看存儲過程
1.查看存儲過程具體內(nèi)容
show create procedure test.select_id;
2.查看存儲過程狀態(tài)
show PROCEDURE status;
六、刪除存儲過程
drop procedure [過程名];
drop procedure test.select_id;
七、SQL語句集延伸說明
1)定義存儲過程的內(nèi)部變量
定義變量語句:declare [變量名,...] [變量類型] [default 默認值];
賦值語句:set [變量名]=[表達式];
可以一次定義多個同類型的變量,并且設(shè)置初始值。
2)多層嵌套
mysql> delimiter // mysql> create procedure select3() -> begin -> declare name varchar(20) default '學生'; -> select name; -> begin -> declare name varchar(20) default '老師'; -> select name; -> end; -> end // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ;
3)條件語句
if語句
if [判斷語句] then [執(zhí)行內(nèi)容] end if; if [判斷語句] then [執(zhí)行內(nèi)容] else [執(zhí)行內(nèi)容] end if;
case語句
case [變量名] when [值] then [執(zhí)行內(nèi)容] when [值] then [執(zhí)行內(nèi)容] ... else [執(zhí)行內(nèi)容] end case;
循環(huán)語句
while語句,先判斷后運行
while [判斷語句] do [執(zhí)行內(nèi)容] end while
mysql> create procedure `while`(in num int) -> begin -> declare var int; -> set var=0; -> while var<num do -> set var=var+1; -> end while; -> select var; -> end //
repeat語句,先運行后判斷
repeat [執(zhí)行內(nèi)容] until [判斷語句] end repeat;
mysql> create procedure `repeat`(in num int) -> begin -> declare var int; -> set var=0; -> repeat -> set var=var+2; -> until var>num -> end repeat; -> select var; -> end //
loop語句,運行直到遇到leave
[標簽名]:loop [執(zhí)行內(nèi)容] leave [標簽名] [執(zhí)行內(nèi)容] end loop;
mysql> create procedure `loop`(in num int) -> begin -> declare var int; -> set var=0; -> label1:loop -> set var=var+2; -> if var>num then -> leave label1; -> end if; -> end loop; -> select var; -> end //
看完上述內(nèi)容,你們對如何進行MySQL存儲有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。
文章名稱:如何進行MySQL存儲-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article38/pgdpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、建站公司、網(wǎng)站營銷、網(wǎng)站導航、網(wǎng)站策劃、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)