您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何理解MySQL的存儲(chǔ)過程與光標(biāo),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
一、存儲(chǔ)過程
T-sql 編程
增 刪 改 查 —》語句
MySQL是一門真正語言 T-sql 類似于函數(shù) function
1.存儲(chǔ)過程:
創(chuàng)建格式:
create procedure 過程名稱(參數(shù)1,參數(shù)2,…….)
begin
sql代碼
end
begin…and 就相當(dāng)于以前{ 代碼段 }
預(yù)編譯,執(zhí)行一次(編譯),后邊在使用直接調(diào)用編譯結(jié)果 ,速度快
create procedure spade()
begin
select * from books;
end
//
mysql默認(rèn)情況下遇到; 就執(zhí)行了, ; 執(zhí)行符號(hào)
在存儲(chǔ)過程運(yùn)行的時(shí)候delimiter符號(hào)修改執(zhí)行符號(hào)
存儲(chǔ)過程的調(diào)用:
call 過程名() //執(zhí)行一次 (編譯)
2、存儲(chǔ)過程中的參數(shù):
in 傳入?yún)?shù) 把值傳進(jìn)去
out 傳出參數(shù) 返回值
inout 傳入傳出參數(shù) 效率低下
in 輸id是幾查找第幾條記錄
create procedure one (in id int)
begin
select * from books where booksId=id;
end
//
call one(3);//
out 參數(shù)一個(gè)返回值
create procedure two (out spade int)
begin
select count(*) into spade from books;
end
//
注意:在sql 語句中賦值 into
在mysql 過程外邊的變量 需要 @a
call thr(@a)//
select @a //查看變量
注意:
mysql中變量
過程外 @變量名稱
過程內(nèi):聲明
declare 變量名稱 數(shù)據(jù)類型;
查找網(wǎng)站類型的圖書
查找到類型的id
根據(jù)類型的id 在到圖書表中 查找到對應(yīng)的圖書
create procedure toto()
begin
declare btid int;
set btid=(select cid from category where cName=”大事記”);
select * from category where cid=btid;
end
//
3、條件和處理程序
在某些條件下 執(zhí)行某些程序
declare handler_type handler for conditionValue sq_statement
handler_type 操作類型
continue 繼續(xù)
exit 退出
undo 忽略
conditionValue sql 錯(cuò)誤的編號(hào)
02000 不正確的FETCH變量數(shù)目
23000 磁盤滿了
sq_statement 執(zhí)行對應(yīng)的操作
declare continue handler for sqlstate “02000” set done=1;
當(dāng)出現(xiàn)02000錯(cuò)誤時(shí)候, 設(shè)置 done=1 后邊程序繼續(xù)執(zhí)行
二、光標(biāo) 抓取數(shù)據(jù)的
1、聲明光標(biāo)
declare 光標(biāo)名稱 cursor for sql語句 (select)
2、打開光標(biāo)
open 光標(biāo)名稱
3、從光標(biāo)中抓取數(shù)據(jù)
fetch 光表名稱 into
4、關(guān)閉光標(biāo)
close 光標(biāo)名稱
//抓取 btype中的數(shù)據(jù)
create procedure sex()
begin
declare id int;
declare name varchar(30);
declare done int default 0;
declare spade cursor for select * from books;
declare continue handler for sqlstate’02000’set done=1;
open spade;
repeat
fetch spade into id,name;
select id;
until done
end repeat;
close spade;
end
//
until false //終止條件不滿足
until true 終止條件滿足
補(bǔ)充:
if 條件 then
執(zhí)行語句
else if 條件 then
執(zhí)行語句
else if 條件 then
執(zhí)行語句
…
else 以上條件都不滿足
end if
mysql存儲(chǔ)過程一般用來提高sql運(yùn)行效率
php調(diào)用存儲(chǔ)過程
create procedure getDate()
begin
select * from btype;
end
刪除存儲(chǔ)過程
drop procedure 過程名;
查看存儲(chǔ)過程
show create procedure 過程名;
看完上述內(nèi)容,你們對如何理解MySQL的存儲(chǔ)過程與光標(biāo)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。