day06 MySQL數(shù)據(jù)庫存儲(chǔ)過程和函數(shù)
成都創(chuàng)新互聯(lián)10多年成都定制網(wǎng)站服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都定制網(wǎng)站及推廣,對(duì)成都工商代辦等多個(gè)方面擁有豐富的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
一、存儲(chǔ)過程和函數(shù)的概述:
數(shù)據(jù)庫的存儲(chǔ)過程和存儲(chǔ)函數(shù)是指在數(shù)據(jù)庫中定義的一些sql語句的集合,直接調(diào)用這些存儲(chǔ)過程的名字或存儲(chǔ)函數(shù)的名字就可以直接使用這些sql。可以避免開發(fā)人員大量的寫一些sql語句操作數(shù)據(jù),可以減少客戶端和服務(wù)器端的數(shù)據(jù)傳輸。所以,學(xué)好存儲(chǔ)過程和存儲(chǔ)函數(shù)也是很重要的哦!
二、存儲(chǔ)過程【procedure】
1、創(chuàng)建存儲(chǔ)過程
create procedure 自定義一個(gè)存儲(chǔ)名() begin select 語句 end; call 存儲(chǔ)名(); 調(diào)用存儲(chǔ)過程
2、刪除存儲(chǔ)過程
drop procedure 存儲(chǔ)名;
3、帶參數(shù)的存儲(chǔ)過程
3.1:in參數(shù),即輸入?yún)?shù)
create procedure 存儲(chǔ)名(in 列名 數(shù)據(jù)類型) begin select 語句 end; call 存儲(chǔ)名(列名的值);
3.2:out參數(shù),即輸出參數(shù)
create procedure 存儲(chǔ)名(out 列名 數(shù)據(jù)類型) begin select * into 列名 from 表名; end; call 存儲(chǔ)名(@列名);
3.3:inout參數(shù),即輸入輸出參數(shù)
create procedure 存儲(chǔ)名(inout 列名 數(shù)據(jù)類型) begin select * into 列名 from 表名; end; set @列名=某個(gè)值 //定義一個(gè)變量并賦值 call 存儲(chǔ)名(@列名);
4、定義變量
4.1:定義局部變量
declare a int //定義 set a=10; //賦值 select a; //輸出
4.2:定義全局變量“@作為起始符”
set @b=20; //定義會(huì)話變量 select @b; //輸出
三、存儲(chǔ)函數(shù)【function】
1、創(chuàng)建存儲(chǔ)函數(shù)定義的實(shí)例。
create function 函數(shù)名(a int , b int) returns int begin declare c int; set c=a+b; return c; end; select 函數(shù)名(a的數(shù)值,b的數(shù)值) //調(diào)用存儲(chǔ)函數(shù)
四、光標(biāo)的運(yùn)用
在MySQL查詢數(shù)據(jù)庫腫,存儲(chǔ)過程和存儲(chǔ)函數(shù)中使用光標(biāo)可以實(shí)現(xiàn)逐條的讀取結(jié)果集中的記錄。主要包括以下幾個(gè)步驟:
1、聲明光標(biāo):
declare 光標(biāo)名 cursor select_name 譯;select_name:是一個(gè)select語句,返回一行或多行數(shù)據(jù)。
實(shí)例:
declare info_student cursor for select sid,name,age from student where sid=1;
2、打開光標(biāo)
open 光標(biāo)名稱
3、使用光標(biāo)
fetch 光標(biāo)名稱 into 列名;
4、關(guān)閉光標(biāo)
close 光標(biāo)名稱
五、查看存儲(chǔ)過程和函數(shù)
1、使用show status 語句查看
show { procedure | function } status [like 'pattern'] 譯: procedure:表示查詢存儲(chǔ)過程 function:表示查詢存儲(chǔ)函數(shù) like 'pattern':用來匹配存儲(chǔ)過程或函數(shù)名稱。
2、使用show create語句查看
show create { procedure | function } sp_name; 譯; procedure:表示查詢存儲(chǔ)過程 function:表示查詢存儲(chǔ)函數(shù) sp_name:表示存儲(chǔ)過程或函數(shù)名稱
3、修改存儲(chǔ)過程和存儲(chǔ)函數(shù)
alter { procedure | function } sp_name { contains sql | no sql | reads sql data | modifies sql data } | sql security { definer | invoker } | comment 'string' 譯: procedure | function:表示是存儲(chǔ)過程還是存儲(chǔ)函數(shù) sp_name :表示名稱 contains sql:表示子程序包含sql語句,但是不包含讀寫數(shù)據(jù)的語句 no sql:表示子程序包含sql語句 reads sql data:表示子程序中包含讀數(shù)據(jù)的語句 modifies sql data :表示子程序中包含寫數(shù)據(jù)的語句 definer | invoker:表示指明權(quán)限執(zhí)行,前者是定義者自己能夠執(zhí)行, 后者是調(diào)用者可以執(zhí)行 comment 'string':注釋信息
4、刪除存儲(chǔ)過程和存儲(chǔ)函數(shù)
drop { procedure | function } sp_name
六、結(jié)束語:
學(xué)到這里,存儲(chǔ)過程和存儲(chǔ)函數(shù)就已經(jīng)學(xué)完了哦!好好消化一下吧!