定義
一個(gè)復(fù)雜邏輯對(duì)SQL語句的批量處理,
通過一個(gè)名字存儲(chǔ)
創(chuàng)建
delimiter // 修改終止符
-- 存儲(chǔ)過程沒有返回值
delimiter // ---- 把終止符;修改成//
create procedure porc2()
begin
-- 可執(zhí)行語句
insert into mm_users values (0,'xiaownag','xxx');
select * from mm_users;
end
// ---- 填寫終止符
delimiter ; ---- 還原原來的終止符以執(zhí)行
查看
-- 查看 mysql.proc
select db,name,type from mysql.proc;
調(diào)用
-- 調(diào)用 如果存儲(chǔ)過程沒有參數(shù) 小括號(hào)可以省略
call proc();
--在pymysql中執(zhí)行存儲(chǔ)過程
cursor.callproc('存儲(chǔ)對(duì)象名')
刪除
-- 刪除
drop procedure proc_stu;
delete from mysql.proc where name = 'porc1';
- 存儲(chǔ)過程和函數(shù)的區(qū)別
- 課件
-- 函數(shù)在使用時(shí)候有哪些限制
-- select 語句不能夠在函數(shù)中執(zhí)行
-- 函數(shù)中除 select into之外其他的 select 語句都不能夠執(zhí)行
-- select into 是將查詢的結(jié)果賦值給某一個(gè)變量
delimiter //
create function f4(in a int,in b int) returns int
begin
-- 定義一個(gè)變量 res
declare res int default 0;
-- 將 a + b的結(jié)果賦值給 res
select count(*) from mm_users into res;
-- set res = a + b;
-- 返回 res
return res;
end
//
delimiter ;
-- 通過存儲(chǔ)過程來實(shí)現(xiàn)函數(shù)中不能夠調(diào)用 select 語句的弊端
-- 但是存儲(chǔ)過程沒有返回值
-- 可以通過 out 類型的參數(shù)來給存儲(chǔ)過程實(shí)現(xiàn)多個(gè)返回值的功能
- 相同點(diǎn)
相同點(diǎn)
存儲(chǔ)過程和函數(shù)都是為了可重復(fù)的執(zhí)行操作數(shù)據(jù)庫的 sql 語句的集合.
存儲(chǔ)過程和函數(shù)都是一次編譯,就會(huì)被緩存起來,
下次使用就直接命中緩存中已經(jīng)編譯好的 sql,
不需要重復(fù)編譯
減少網(wǎng)絡(luò)交互,減少網(wǎng)絡(luò)訪問流量
- 不同點(diǎn)
不同點(diǎn)
標(biāo)識(shí)符不同,函數(shù)的標(biāo)識(shí)符是 function, 過程:procedure
函數(shù)中有返回值,且必須有返回值,而過程沒有返回值,
但是可以通過設(shè)置參數(shù)類型(in,out)來實(shí)現(xiàn)多個(gè)參數(shù)或者返回值
函數(shù)使用 select 調(diào)用,存儲(chǔ)過程需要使用 call 調(diào)用
select 語句可以在存儲(chǔ)過中調(diào)用,
但是除了 select ... into 之外的 select 語句都不能再函數(shù)中調(diào)用
通過 in out 參數(shù),過程相關(guān)函數(shù)更加靈活,可以返回多個(gè)結(jié)果
在實(shí)際開發(fā)中根據(jù)個(gè)人喜好選擇使用函數(shù)或者存儲(chǔ)過程
- 參數(shù)/返回值
-- 參數(shù)的類型
-- in 傳入類型的參數(shù),函數(shù)或者存儲(chǔ)過程的參數(shù) 默認(rèn)就是傳入類型的參數(shù)
-- out 傳出類型的參數(shù), 給存儲(chǔ)過程實(shí)現(xiàn)多個(gè)返回值的功能
-- inout 既可以傳入又可以傳出 一般不用 一個(gè)參數(shù)要表達(dá)多個(gè)意思,
造成參數(shù)的語義不夠清晰 函數(shù)的參數(shù)的大個(gè)數(shù): 1024
procedure p1(
in arg1 int, # 讓存儲(chǔ)過程內(nèi)部使用
out arg2 varchar(50)
inout arg3 int
)
begin
...
end
@i1 = "alex"
# @il 引用
call p1(1, @i1, @i2) # @設(shè)置一個(gè)變量@i1= null
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,先為開化等服務(wù)建站,開化等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為開化企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
分享標(biāo)題:MySQL--存儲(chǔ)過程-創(chuàng)新互聯(lián)
網(wǎng)頁URL:
http://weahome.cn/article/cdgeoe.html