版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目十?dāng)?shù)據(jù)庫(kù)的編程訪問(wèn)
在具體的應(yīng)用中,一個(gè)完整的操作需要包含多條SQL語(yǔ)句,為了解決該問(wèn)題,MySQL提供了存儲(chǔ)過(guò)程、自定義函數(shù)等數(shù)據(jù)庫(kù)對(duì)象。
本項(xiàng)目先學(xué)習(xí)MySQL編程的基礎(chǔ)知識(shí),包括常量、變量、流程控制語(yǔ)句、常用內(nèi)置函數(shù)等內(nèi)容。然后,學(xué)習(xí)創(chuàng)建與使用存儲(chǔ)過(guò)程、自定義函數(shù),實(shí)現(xiàn)通過(guò)編程訪問(wèn)“學(xué)生成績(jī)管理”數(shù)據(jù)庫(kù)的目的。知識(shí)目標(biāo):識(shí)記MySQL編程的基礎(chǔ)知識(shí)(包括常量與變量、常用內(nèi)置函數(shù)、流程控制語(yǔ)句)。識(shí)記創(chuàng)建與使用存儲(chǔ)過(guò)程、自定義函數(shù)相關(guān)語(yǔ)句的語(yǔ)法。能力目標(biāo):能創(chuàng)建不帶參數(shù)或帶參數(shù)的存儲(chǔ)過(guò)程并調(diào)用。能創(chuàng)建不帶參數(shù)或帶參數(shù)的自定義函數(shù)并調(diào)用。任務(wù)10.1任務(wù)10.2掌握MySQL編程基礎(chǔ)掌握常用內(nèi)置函數(shù)任務(wù)10.4創(chuàng)建與使用自定義函數(shù)任務(wù)10.3創(chuàng)建與使用存儲(chǔ)過(guò)程
任務(wù)10.1掌握MySQL編程基礎(chǔ)
掌握MySQL的編程基礎(chǔ)知識(shí),包括常量與變量、流程控制語(yǔ)句等內(nèi)容。
變量分為局部變量、用戶變量和系統(tǒng)變量。
流程控制語(yǔ)句有:IF、CASE、WHILE、LOOP、LEAVE、ITERATE、REPEAT?!救蝿?wù)描述】掌握MySQL編程基礎(chǔ)10.1【相關(guān)知識(shí)】10.110.1.210.1.1
流程控制語(yǔ)句
常量與變量掌握MySQL編程基礎(chǔ)1.常量常量指的是程序運(yùn)行過(guò)程中其值始終不變的量。在程序設(shè)計(jì)過(guò)程中,定義常量的格式取決于它所表示的值的數(shù)據(jù)類型。MySQL常用的常量有以下幾種:(1)字符串常量。用單引號(hào)或雙引號(hào)括起來(lái)的字符序列,如:‘hello’或“hello”(2)數(shù)值常量。如:-1.39、2(3)日期時(shí)間常量。用單引號(hào)或雙引號(hào)括起來(lái)的日期時(shí)間字符串,如:‘1999-06-17’或”1999-06-17”。(4)布爾值。只有二個(gè)值:TRUE和FALSE,TRUE的數(shù)字值為1,F(xiàn)ALSE的數(shù)字值為0。(5)空值:NULL??罩当硎尽拔炊x”、“沒(méi)數(shù)據(jù)”等含義,不同于數(shù)值0或空字符串。常量與變量10.1.12.變量變量指的是程序運(yùn)行過(guò)程中其值可以改變的量,用于臨時(shí)存放數(shù)據(jù)。MySQL根據(jù)變量的定義方式,把變量分為局部變量、用戶變量和系統(tǒng)變量,局部變量和用戶變量都是由用戶定義的,系統(tǒng)變量由系統(tǒng)定義。(1)局部變量局部變量一般用在SQL語(yǔ)句塊中,比如存儲(chǔ)過(guò)程的BEGIN/END語(yǔ)句塊,其作用域僅限于該語(yǔ)句塊。①聲明局部變量要先聲明后使用,聲明變量的語(yǔ)法格式如下:DECLARE變量名1[,變量名2]...數(shù)據(jù)類型[DEFAULT默認(rèn)值];常量與變量10.1.1②賦值給局部變量賦值可用SET語(yǔ)句或SELECT….INTO…語(yǔ)句。SET語(yǔ)句可以一次給多個(gè)變量賦值,語(yǔ)法格式如下:SET變量1=表達(dá)式1[,變量2=表達(dá)式2,…];SELECT….INTO…語(yǔ)句可以把查詢得到的值賦給變量,變量的個(gè)數(shù)與數(shù)據(jù)類型要與SELECT子句中數(shù)據(jù)項(xiàng)的個(gè)數(shù)與數(shù)據(jù)類型相一致,要注意的是當(dāng)查詢結(jié)果返回多行時(shí)系統(tǒng)會(huì)報(bào)錯(cuò)。常量與變量10.1.1(2)用戶變量用戶變量與連接有關(guān),在客戶端連接到數(shù)據(jù)庫(kù)實(shí)例整個(gè)過(guò)程中用戶變量都是有效的,可以通過(guò)用戶變量將值從一個(gè)語(yǔ)句傳遞到另一個(gè)語(yǔ)句。MySQL中用戶變量不用事先申明,給用戶變量賦值以后相當(dāng)于完成了變量的定義和初始化工作,但是用戶變量名字必須以@符號(hào)開(kāi)頭。給用戶變量賦值同局部變量,可以用SET語(yǔ)句或SELECT….INTO…語(yǔ)句。常量與變量10.1.1(3)系統(tǒng)變量系統(tǒng)變量是MySQL的一些特定的設(shè)置,當(dāng)數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)的時(shí)候,這些設(shè)置被讀取來(lái)決定下一步驟的動(dòng)作。系統(tǒng)變量名以@@開(kāi)頭。系統(tǒng)變量在MySQL服務(wù)器啟動(dòng)時(shí)就被引入并初始化為默認(rèn)值,運(yùn)行過(guò)程中,用戶不能用SET語(yǔ)句或SELECT….INTO…語(yǔ)句給系統(tǒng)變量賦值,只能讀取系統(tǒng)變量的值來(lái)決定下一步的操作。如:系統(tǒng)變量@@VERSION存放的是當(dāng)前使用的MySQL版本。顯示系統(tǒng)變量清單用SHOWVARIABLES命令。常量與變量10.1.11.IF語(yǔ)句IF語(yǔ)句用于條件判斷,根據(jù)不同的條件執(zhí)行不同的操作。語(yǔ)法格式:IF條件1THEN語(yǔ)句序列1[ELSEIF條件2THEN語(yǔ)句序列2]…[ELSE語(yǔ)句序列e]ENDIF;說(shuō)明:該語(yǔ)句在執(zhí)行時(shí)首先判斷IF后的條件是否為真,如果為真執(zhí)行THEN后面的語(yǔ)句序列,如果為假則繼續(xù)判斷條件2是否為真……,依此類推。如果所有條件都為假時(shí),則執(zhí)行ELSE子句后的語(yǔ)句序列。語(yǔ)句序列中包含一條或多條語(yǔ)句,如果是多條語(yǔ)句要用BEGIN….END把它們括起來(lái)。流程控制語(yǔ)句10.1.22.CASE語(yǔ)句CASE語(yǔ)句用來(lái)實(shí)現(xiàn)比IF語(yǔ)句更復(fù)雜的條件判斷,CASE語(yǔ)句有兩種語(yǔ)法格式。(1)簡(jiǎn)單CASE
簡(jiǎn)單CASE語(yǔ)句是將某個(gè)表達(dá)式與一組簡(jiǎn)單表達(dá)式進(jìn)行比較以確定結(jié)果。
語(yǔ)法格式:CASE表達(dá)式WHEN值1THEN語(yǔ)句序列1[WHEN值2THEN語(yǔ)句序列2]…[ELSE語(yǔ)句序列e]ENDCASE;流程控制語(yǔ)句10.1.2(2)搜索CASE
搜索CASE是通過(guò)計(jì)算一組條件表達(dá)式以確定結(jié)果。
語(yǔ)法格式:CASEWHEN條件1THEN語(yǔ)句序列1[WHEN條件2THEN語(yǔ)句序列2]…[ELSE語(yǔ)句序列e]ENDCASE;說(shuō)明:
搜索CASE比簡(jiǎn)單CASE可以實(shí)現(xiàn)更為復(fù)雜的條件判斷,使用起來(lái)更方便流程控制語(yǔ)句10.1.2思政小貼士【條件語(yǔ)句根據(jù)條件選擇不同操作】人的一生中會(huì)面臨很多選擇,如上學(xué)、工作、結(jié)婚、創(chuàng)業(yè)、合作,投資等等,能夠做出正確的選擇很重要。流程控制語(yǔ)句10.1.23.WHILE語(yǔ)句WHILE語(yǔ)句是循環(huán)語(yǔ)句,當(dāng)指定的條件為真時(shí),重復(fù)執(zhí)行循環(huán)體的語(yǔ)句序列。語(yǔ)法格式:[開(kāi)始標(biāo)號(hào):]WHILE條件DO
語(yǔ)句序列;ENDWHILE[結(jié)束標(biāo)號(hào)];說(shuō)明:開(kāi)始標(biāo)號(hào)和結(jié)束標(biāo)號(hào)分別表示循環(huán)的開(kāi)始和結(jié)束,兩者名字必須相同,但可以省略,??梢栽谘h(huán)體內(nèi)設(shè)置LEAVE和ITERATE語(yǔ)句,以便控制循環(huán)語(yǔ)句的執(zhí)行過(guò)程。LEAVE語(yǔ)句用于直接退出循環(huán),使用格式:LEAVE標(biāo)號(hào);ITERATE語(yǔ)句用于跳出本次循環(huán),不再執(zhí)行后面的語(yǔ)句,直接進(jìn)入下一次循環(huán)。流程控制語(yǔ)句10.1.24.REPEAT語(yǔ)句REPLEAT語(yǔ)句也是循環(huán)語(yǔ)句,與WHILE語(yǔ)句的不同是:WHILE是先判斷再執(zhí)行,有可能循環(huán)體的語(yǔ)句序列一次也不會(huì)執(zhí)行;而REPEAT則是先執(zhí)行再判斷。循環(huán)體內(nèi)的語(yǔ)句序列至少執(zhí)行一次。語(yǔ)法格式:[開(kāi)始標(biāo)號(hào):]REPEAT
語(yǔ)句序列;UNTIL條件ENDREPEAT[結(jié)束標(biāo)號(hào)];流程控制語(yǔ)句10.1.25.LOOP語(yǔ)句LOOP語(yǔ)句可以使某些特定的語(yǔ)句重復(fù)執(zhí)行,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的循環(huán)。但是LOOP語(yǔ)句本身沒(méi)有停止循環(huán)的判斷條件,必須遇到LEAVE語(yǔ)句才能停止循環(huán)。語(yǔ)法格式:[開(kāi)始標(biāo)號(hào):]LOOP
語(yǔ)句序列;ENDLOOP[結(jié)束標(biāo)號(hào)];流程控制語(yǔ)句10.1.2【任務(wù)實(shí)施】1.定義一個(gè)用戶變量@name,賦值為“張三”。SET@name=”張三”;掌握MySQL編程基礎(chǔ)10.1圖10.1給用戶變量賦值并顯示【任務(wù)實(shí)施】2.顯示當(dāng)前使用的MySQL版本信息。SELECT@@VERSION;掌握MySQL編程基礎(chǔ)10.1圖10.2顯示當(dāng)前版本信息【任務(wù)實(shí)施】3.聲明二個(gè)整形的局部變量n1和n2,統(tǒng)計(jì)stuinfo表的學(xué)生人數(shù)并賦值給n1。DECLAREn1,n2INT;SELECTcount(*)INTOn1FROMstuinfo;4.判斷兩個(gè)數(shù)(n1和n2)哪個(gè)更大,結(jié)果存放在result中。(用IF語(yǔ)句)IFn1>n2THENSETresult='大于';ELSEIFn1=n2THEN
SETresult='等于';ELSE
SETresult='小于';ENDIF;掌握MySQL編程基礎(chǔ)10.1【任務(wù)實(shí)施】5.根據(jù)成績(jī)等級(jí)gradeLevel值(‘A’.’B’.’C’,’D’,’E’),設(shè)置變量grade相應(yīng)的值(優(yōu)秀,良好,中等,及格,不及格)(用CASE語(yǔ)句)。(1)用普通CASE語(yǔ)句CASEgradeLevel
WHEN'A'THENSETgrade='優(yōu)秀';
WHEN'B'THENSETgrade='良好';
WHEN'C'THENSETgrade='中等';
WHEN'D'THENSETgrade='及格';
WHEN'E'THENSETgrade='不及格';ELSESETgrade='超出范圍!';ENDCASE;掌握MySQL編程基礎(chǔ)10.1【任務(wù)實(shí)施】(2)用搜索CASE語(yǔ)句CASE
WHENgradeLevel='A'THENSETgrade='優(yōu)秀';
WHENgradeLevel='B'THENSETgrade='良好';
WHENgradeLevel='C'THENSETgrade='中等';
WHENgradeLevel='D'THENSETgrade='及格';
WHENgradeLevel='E'THENSETgrade='不及格';ELSESETgrade='超出范圍!';ENDCASE;掌握MySQL編程基礎(chǔ)10.1【任務(wù)實(shí)施】6.分別用WHILE、REPEAT、LOOP這三種循環(huán)語(yǔ)句實(shí)現(xiàn)1+2+…+100。(1)用WHILE語(yǔ)句SETi=0;SETs=0;WHILEi<100DOSETi=i+1;
SETs=s+i;ENDWHILE;掌握MySQL編程基礎(chǔ)10.1【任務(wù)實(shí)施】(2)用REPEAT語(yǔ)句SETi=0;SETs=0;REPEATSETi=i+1;
SETs=s+i;UNTILi>=100ENDREPEAT;掌握MySQL編程基礎(chǔ)10.1【任務(wù)實(shí)施】(3)用LOOP語(yǔ)句SETi=0;SETs=0;L1:LOOPSETi=i+1;SETs=s+i;IFi>=100THENLEAVEL1;ENDIF;ENDLOOPL1;掌握MySQL編程基礎(chǔ)10.1任務(wù)10.2掌握常用內(nèi)置函數(shù)
掌握MySQL常用的一些系統(tǒng)內(nèi)置函數(shù),包括數(shù)學(xué)函數(shù)、字符串函數(shù)、日期時(shí)間函數(shù)、流程控制函數(shù)?!救蝿?wù)描述】掌握常用內(nèi)置函數(shù)10.2【相關(guān)知識(shí)】10.2.1
數(shù)學(xué)函數(shù)
日期時(shí)間函數(shù)10.2.310.2.2
字符串函數(shù)
流程控制函數(shù)10.2.410.2掌握常用內(nèi)置函數(shù)數(shù)學(xué)函數(shù)是MySQL中常用的一類函數(shù),主要用于處理數(shù)字,常用的數(shù)學(xué)函數(shù)如表10-1所示。如果在計(jì)算過(guò)程中出錯(cuò),表10-1中所有函數(shù)都將返回空值(NULL)。數(shù)學(xué)函數(shù)10.2.1字符串在數(shù)據(jù)庫(kù)存儲(chǔ)中是非常常見(jiàn)的一種數(shù)據(jù)類型。MySQL提供的常用字符串函數(shù)如表10-2所示。字符串函數(shù)10.2.2MySQL提供的常用日期時(shí)間函數(shù)如表10-3所示。日期時(shí)間函數(shù)10.2.3MySQL流程控制函數(shù)用于控制SQL語(yǔ)句中實(shí)現(xiàn)條件的選擇,常用的流程控制函數(shù)如表10-4所示。流程控制函數(shù)10.2.4【任務(wù)實(shí)施】1.顯示-435、-278.5的絕對(duì)值。SELECTABS(-435),ABS(-278.5);圖10.3ABS函數(shù)的應(yīng)用10.2掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】2.顯示-1.2向下、向上取整,9.9向下、向上取整的值。SELECFLOOR(-1.2),CEILING(-1.2),FLOOR(9.9),CEILING(9.9);10.2圖10.4FLOOR、CEILING函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】3.顯示求-2、2、0這三個(gè)數(shù)的符號(hào)值。SELECTSIGN(-2),SIGN(2),SIGN(0);10.2圖10.5SIGN函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】4.顯示幾個(gè)數(shù)進(jìn)行四舍五入操作的結(jié)果:5.6去掉小數(shù),3.54保留一位小數(shù),2.637保留二位小數(shù)。SELECTROUND(5.6),ROUND(3.54,1),ROUND(2.637,2);10.2圖10.6ROUND函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】5.顯示幾個(gè)數(shù)進(jìn)行截?cái)嗖僮鞯慕Y(jié)果:3.54保留1位小數(shù),2.637保留2位小數(shù)。SELECTTRUNCATE(3.54,1),TRUNCATE(2.637,2);10.2圖10.7TRUNCATE函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】6.顯示3除以2、8除以4的余數(shù)。SELECTMOD(3,2),MOD(8,4);10.2圖10.8MOD函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】7.顯示字符串'ax'左邊字符的ASCII碼值,以及ASCII值97所對(duì)應(yīng)的字符。SELECTASCII('ax'),CHAR(97usingascii);10.2圖10.9ASCII函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】8.查詢女生的學(xué)號(hào)與姓名,并合并成“學(xué)號(hào)-姓名”形式。SELECTCONCAT(stuno,'-',stuname)AS'學(xué)號(hào)-姓名'FROMstuinfoWHEREstusex='女';10.2圖10.10CONCAT函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】9.分別求“MySQL”、“數(shù)據(jù)庫(kù)”這二個(gè)字符串的字符個(gè)數(shù)及字節(jié)長(zhǎng)度。SELECTCHAR_LENGTH('MySQL'),CHAR_LENGTH('數(shù)據(jù)庫(kù)'),LENGTH('MySQL8.0'),LENGTH('數(shù)據(jù)庫(kù)')10.2圖10.11CHAR_LENGTH、LENGTH函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】10.字符串'MySQL'的字符全轉(zhuǎn)換成大寫(xiě)或小寫(xiě)。SELECTUPPER('MySQL'),LOWER('MySQL');10.2圖10.12UPPER、LOWER函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】11.取字符串'foobarbar'左邊或右邊的5個(gè)字符。SELECTLEFT('foobarbar',5),RIGHT('foobarbar',5);10.2圖10.13LEFT、RIGHT函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】12.將字符串'bar'首部或尾部或首尾部的空格截去,再顯示字符串的長(zhǎng)度。SELECTLENGTH(LTRIM('bar')),LENGTH(TRIM('bar')),LENGTH(RTRIM('bar'));10.2圖10.14去空格函數(shù)(LTRIM,RTRIM,TRIM)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】13.將字符串''中的'w'字符用'Ww'替換掉。SELECTREPLACE('','w','Ww');10.2圖10.15REPLACE函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】14.取字符串‘foobarbar’的子串,從第4個(gè)字符開(kāi)始,取3個(gè)字符。SELECTSUBSTRING('foobarbar',4,3);10.2圖10.16SUBSTR函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】15.顯示當(dāng)前日期時(shí)間、當(dāng)前日期、當(dāng)前時(shí)間。SELECTNOW(),CURDATE(),CURTIME();10.2圖10.17NOW、CURDATE、CURTIME函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】16.分別顯示日期'2019-10-1'的年份、月份的數(shù)值,以及該日期是本月的第幾天。SELECTYEAR('2019-10-1'),MONTH('2019-10-1'),DAY('2019-10-1');10.2圖10.18YEAR、MONTH和DAY函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】17.顯示日期'2019-10-1'的英文月份名稱及該日期是星期幾。SELECTMONTHNAME('2019-10-1'),DAYNAME('2019-10-1');10.2圖10.19MONTHNAME、DAYNAME函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】18.顯示’2020-2-26’與’1994-9-10’相隔的天數(shù)。SELECTDATEDIFF('2020-2-26','1994-9-10');10.2圖10.20DATEDIFF函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】19.查詢學(xué)生選課成績(jī)表(stumarks)中所有及格的成績(jī)記錄:80分以上顯示“優(yōu)良”,其他顯示“合格”。SELECTstuno,cno,IF(stuscore>=80,'優(yōu)良','合格')FROMstumarksWHEREstuscore>=60;10.2圖10.21IF函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】20.查詢學(xué)生選課成績(jī)表(stumarks)中學(xué)號(hào)為“S001”學(xué)生的所有選課記錄,成績(jī)?yōu)镹ULL的顯示為0分。SELECTcno,IFNULL(stuscore,0)FROMstumarksWHEREstuno='S001';10.2圖10.22IFNULL函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)【任務(wù)實(shí)施】21.查詢學(xué)生基本信息表(stuinfo)的學(xué)生姓名及性別,性別為“女”時(shí)顯示“0”,為“男”時(shí)顯示“1”。SELECTstuname,
CASEstusex
WHEN'女'THEN'0'
WHEN'男'THEN'1'ENDstusexFROMstuinfo;10.2圖10.23CASE函數(shù)的應(yīng)用掌握常用內(nèi)置函數(shù)任務(wù)10.3創(chuàng)建與使用存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程(PROCEDURE)是在數(shù)據(jù)庫(kù)中定義的一些完成特定功能的SQL語(yǔ)句集。類似于Java語(yǔ)言中的方法。存儲(chǔ)過(guò)程可以帶參數(shù),參數(shù)有三種:輸入(IN)、輸出(OUT)和輸入輸出(INOUT)。存儲(chǔ)過(guò)程創(chuàng)建后用CALL命令調(diào)用。通過(guò)創(chuàng)建存儲(chǔ)過(guò)程訪問(wèn)“學(xué)生成績(jī)管理”數(shù)據(jù)庫(kù)的數(shù)據(jù)?!救蝿?wù)描述】10.3【相關(guān)知識(shí)】10.3.2
創(chuàng)建存儲(chǔ)過(guò)程
查看存儲(chǔ)過(guò)程10.3.410.3.1
存儲(chǔ)過(guò)程概念
刪除存儲(chǔ)過(guò)程10.3.510.3.3
調(diào)用存儲(chǔ)過(guò)程10.3創(chuàng)建與使用存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程(PROCEDURE)是在數(shù)據(jù)庫(kù)中定義的一些完成特定功能的SQL語(yǔ)句集??梢岳斫獬墒菫橐院笫褂枚4娴囊粭l或多條SQL語(yǔ)句,把一組SQL語(yǔ)句封裝成一個(gè)過(guò)程,可以實(shí)現(xiàn)一些比較復(fù)雜的邏輯功能,類似于JAVA語(yǔ)言中的方法。
存儲(chǔ)過(guò)程可以有輸入輸出參數(shù),可以聲明變量,可以包含IF、CASE、WHILE等流程控制語(yǔ)句。存儲(chǔ)過(guò)程概念10.3.1使用存儲(chǔ)過(guò)程主要有以下優(yōu)點(diǎn):(1)能實(shí)現(xiàn)較快的執(zhí)行速度(2)減少網(wǎng)絡(luò)流量(3)模塊化程序設(shè)計(jì)(4)存儲(chǔ)過(guò)程在服務(wù)器端運(yùn)行,可以減少客戶端的壓力(5)可作為一種安全機(jī)制使用存儲(chǔ)過(guò)程概念10.3.1創(chuàng)建存儲(chǔ)過(guò)程用CREATEPROCEDURE語(yǔ)句。如果想在調(diào)用存儲(chǔ)過(guò)程的時(shí)候傳入或傳出數(shù)據(jù),創(chuàng)建存儲(chǔ)過(guò)程時(shí)可以帶參數(shù),參數(shù)列表在過(guò)程名后面的括號(hào)中定義。語(yǔ)法格式如下:CREATEPROCEDURE過(guò)程名([參數(shù)[,…]])BEGIN
語(yǔ)句序列END創(chuàng)建存儲(chǔ)過(guò)程10.3.2說(shuō)明:一個(gè)存儲(chǔ)過(guò)程是屬于某個(gè)數(shù)據(jù)庫(kù)的,不能重名,也不能與系統(tǒng)內(nèi)置函數(shù)同名。沒(méi)有參數(shù),過(guò)程名后面的()也不能省略。參數(shù)定義格式:IN|OUT|INOUT參數(shù)名數(shù)據(jù)類型(長(zhǎng)度)過(guò)程體以BEGIN開(kāi)始,以END結(jié)束,包含了調(diào)用存儲(chǔ)過(guò)程時(shí)要執(zhí)行的語(yǔ)句序列。在存儲(chǔ)過(guò)程創(chuàng)建前,必須要修改語(yǔ)句結(jié)束符,創(chuàng)建之后再把語(yǔ)句結(jié)束符改回分號(hào)。
修改語(yǔ)句結(jié)束符用DELIMITER命令,語(yǔ)法格式:DELIMITER結(jié)束符
語(yǔ)句結(jié)束符通常是用一些特殊的符號(hào)://、$$、##創(chuàng)建存儲(chǔ)過(guò)程10.3.2存儲(chǔ)過(guò)程創(chuàng)建成功后,就可以用CALL命令隨時(shí)調(diào)用。1.不帶參數(shù)的存儲(chǔ)過(guò)程的調(diào)用語(yǔ)法格式如下:CALL過(guò)程名();2.帶參數(shù)的存儲(chǔ)過(guò)程的調(diào)用語(yǔ)法格式如下:CALL過(guò)程名(實(shí)參列表);說(shuō)明:實(shí)參列表要與創(chuàng)建存儲(chǔ)過(guò)程時(shí)的參數(shù)列表相對(duì)應(yīng):當(dāng)參數(shù)被指定為IN時(shí),則實(shí)參值可以為變量或是直接的數(shù)據(jù);當(dāng)參數(shù)被指定為OUT或INOUT時(shí),調(diào)用時(shí)相應(yīng)的實(shí)參值必須是一個(gè)變量,用于接收返回給調(diào)用者的數(shù)據(jù)。調(diào)用存儲(chǔ)過(guò)程10.3.3MySQL提供了查看存儲(chǔ)過(guò)程的命令。1.查看當(dāng)前庫(kù)下所有存儲(chǔ)過(guò)程SHOWPROCEDURESTATUS;2、查看某個(gè)存儲(chǔ)過(guò)程的創(chuàng)建信息SHOWCREATEPROCEDURE存儲(chǔ)過(guò)程名;查看存儲(chǔ)過(guò)程10.3.4刪除存儲(chǔ)過(guò)程用DROPPROCEDURE語(yǔ)句。語(yǔ)法格式如下:DROPPROCEDURE[IFEXISTS]過(guò)程名;說(shuō)明:IFEXISTS子句是可選項(xiàng),用于判斷要?jiǎng)h除的存儲(chǔ)過(guò)程是否存在,防止發(fā)生錯(cuò)誤。刪除存儲(chǔ)過(guò)程10.3.5【任務(wù)實(shí)施】1.創(chuàng)建一個(gè)不帶參數(shù)的存儲(chǔ)過(guò)程p1并調(diào)用,功能:查詢stuinfo表中所有男生的信息。(1)創(chuàng)建存儲(chǔ)過(guò)程p1:DROPPROCEDUREIFEXISTSp1;#如果有重名的存儲(chǔ)過(guò)程先刪除DELIMITER//
#把默認(rèn)語(yǔ)句結(jié)束符改成//CREATEPROCEDUREp1()BEGIN
SELECT*FROMstuinfoWHEREstusex='男';END//DELIMITER;#把語(yǔ)句結(jié)束符改回分號(hào)說(shuō)明:MySQL的注釋符有三種,行注釋可以用“#”或“--”,塊注釋用“/*…*/”。10.3創(chuàng)建與使用存儲(chǔ)過(guò)程【任務(wù)實(shí)施】10.3圖10.24創(chuàng)建存儲(chǔ)過(guò)程p1創(chuàng)建與使用存儲(chǔ)過(guò)程【任務(wù)實(shí)施】(2)調(diào)用存儲(chǔ)過(guò)程p1:CALLp1();10.3圖10.25存儲(chǔ)過(guò)程p1調(diào)用結(jié)果創(chuàng)建與使用存儲(chǔ)過(guò)程【任務(wù)實(shí)施】2.創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程p2并調(diào)用。功能:根據(jù)二個(gè)學(xué)生的學(xué)號(hào)從數(shù)據(jù)表中獲取他們的出生日期數(shù)據(jù)并進(jìn)行比較,并返回比較的結(jié)果(用二個(gè)輸入?yún)?shù),一個(gè)輸出參數(shù))。10.3創(chuàng)建與使用存儲(chǔ)過(guò)程(1)創(chuàng)建存儲(chǔ)過(guò)程p2【任務(wù)實(shí)施】DROPPROCEDUREIFEXISTSp2;DELIMITER//CREATEPROCEDUREp2(sno1char(4),sno2char(4),OUTresultvarchar(10))BEGINDECLAREb1,b2DATE;SELECTstubirthdayINTOb1FROMstuinfoWHEREstuno=sno1;SELECTstubirthdayINTOb2FROMstuinfoWHEREstuno=sno2;IFb1>b2THEN
SETresult='大于';ELSEIFb1=b2THENSETresult='相等';ELSESETresult='小于';ENDIF;END//DELIMITER;10.3創(chuàng)建與使用存儲(chǔ)過(guò)程【任務(wù)實(shí)施】(2)調(diào)用存儲(chǔ)過(guò)程p2CALLp2('S001','S002',@result);SELECT@result;#查看變量@result值10.3圖10.26存儲(chǔ)過(guò)程p2調(diào)用結(jié)果創(chuàng)建與使用存儲(chǔ)過(guò)程【任務(wù)實(shí)施】3.創(chuàng)建一個(gè)交換二個(gè)整數(shù)的存儲(chǔ)過(guò)程proc_swap并調(diào)用(用二個(gè)INOUT參數(shù)存放交換的二個(gè)數(shù))。(1)創(chuàng)建存儲(chǔ)過(guò)程proc_swapDROPPROCEDUREIFEXISTSproc_swap;DELIMITER//CREATEPROCEDUREproc_swap(INOUT
aint,INOUT
bint)BEGINDECLAREtempint;SETtemp=a;SETa=b;SETb=temp;END//DELIMITER;10.3創(chuàng)建與使用存儲(chǔ)過(guò)程【任務(wù)實(shí)施】(2)調(diào)用存儲(chǔ)過(guò)程proc_swap#用proc_swap交換變量@a、@b的值SET@a=10,@b=20;SELECT@a,@b;CALLproc_swap(@a,@b);SELECT@a,@b;10.3圖10.27存儲(chǔ)過(guò)程proc_swap調(diào)用結(jié)果創(chuàng)建與使用存儲(chǔ)過(guò)程思政小貼士【視圖是存儲(chǔ)的查詢語(yǔ)句,存儲(chǔ)過(guò)程是存儲(chǔ)的處理過(guò)程,對(duì)應(yīng)多條SQL語(yǔ)句】學(xué)習(xí)知識(shí)要注意融會(huì)貫通10.3創(chuàng)建與使用存儲(chǔ)過(guò)程任務(wù)10.4創(chuàng)建與使用自定義函數(shù)自定義的函數(shù)與存儲(chǔ)過(guò)程很相似,不同的是自定義函數(shù)要返回值,參數(shù)只有輸入?yún)?shù)這一種類型,創(chuàng)建后在表達(dá)式中調(diào)用。創(chuàng)建與使用自定義函數(shù)訪問(wèn)“學(xué)生成績(jī)管理”數(shù)據(jù)庫(kù)的數(shù)據(jù)?!救蝿?wù)描述】10.4創(chuàng)建與使用自定義函數(shù)【相關(guān)知識(shí)】10.4.210.4.1
創(chuàng)建自定義函數(shù)
自定義函數(shù)概述10.4創(chuàng)建與使用自定義函數(shù)自定義的函數(shù)(FUNCTION)與前面介紹的存儲(chǔ)過(guò)程很相似,它們都是在數(shù)據(jù)庫(kù)中定義的一些完成特定功能的SQL語(yǔ)句集。但是,它們也有如下區(qū)別:(1)存儲(chǔ)過(guò)程用CALL命令調(diào)用,自定義函數(shù)不能用CALL命令調(diào)用,只能出現(xiàn)在表達(dá)式中使用。(2)存儲(chǔ)過(guò)程的參數(shù)有IN、OUT和INOUT三種類型,自定義函數(shù)參數(shù)只有一種類型,默認(rèn)為IN。自定義函數(shù)概述10.4.1創(chuàng)建自定義函數(shù)用CREATEFUNCTION語(yǔ)句。語(yǔ)法格式如下:CREATEFUNCTION自定義函數(shù)名([參數(shù)[,…]])RETURNS數(shù)據(jù)類型BEGIN
語(yǔ)句序列END說(shuō)明:自定義函數(shù)名不能和當(dāng)前庫(kù)中已有的存儲(chǔ)過(guò)程同名RETURNS子句用于聲明函數(shù)返回值的數(shù)據(jù)類型。函數(shù)體里至少有一個(gè)RETURN語(yǔ)句,用于返回值。創(chuàng)建自定義函數(shù)10.4.2【任務(wù)實(shí)施】1.創(chuàng)建一個(gè)不帶參數(shù)的自定義函數(shù)f1并調(diào)用,功能:返回stuinfo表中所有學(xué)生的人數(shù)。(1)創(chuàng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)關(guān)技術(shù)崗位管理制度匯編(3篇)
- 細(xì)胞呼吸的原理與應(yīng)用課件2025-2026學(xué)年高一上學(xué)期生物人教版必修1
- 2026廣東廣州市天河區(qū)華南師范大學(xué)招聘教輔人員2人備考考試試題及答案解析
- 2026年寶雞青銅器博物院寒假志愿者招募備考考試試題及答案解析
- 2026上半年云南事業(yè)單位聯(lián)考省民族宗教事務(wù)委員會(huì)委屬事業(yè)單位公開(kāi)招聘人員備考考試試題及答案解析
- 2026青海海東市第二人民醫(yī)院校園引才招聘10人筆試備考題庫(kù)及答案解析
- 2026天津市河?xùn)|區(qū)教育系統(tǒng)招聘事業(yè)單位160人備考考試試題及答案解析
- 2026上海交通大學(xué)醫(yī)學(xué)院尚思神經(jīng)與視覺(jué)研究院招聘教學(xué)科研人員6人考試參考試題及答案解析
- 第四單元8夜色
- 2026浙江杭州蕭山區(qū)公安分局招聘警務(wù)輔助人員100人筆試備考試題及答案解析
- 新質(zhì)生產(chǎn)力在體育產(chǎn)業(yè)高質(zhì)量發(fā)展中的路徑探索
- 2025年公民素質(zhì)養(yǎng)成知識(shí)考察試題及答案解析
- 老年人營(yíng)養(yǎng)和飲食
- 車載光通信技術(shù)發(fā)展及無(wú)源網(wǎng)絡(luò)應(yīng)用前景
- 《關(guān)鍵軟硬件自主可控產(chǎn)品名錄》
- 2025年濟(jì)南市九年級(jí)中考語(yǔ)文試題卷附答案解析
- 信息安全風(fēng)險(xiǎn)評(píng)估及應(yīng)對(duì)措施
- 紅藍(lán)黃光治療皮膚病臨床應(yīng)用專家共識(shí)(2025版)解讀
- 錄音棚項(xiàng)目可行性研究報(bào)告
- 園藝苗木種植管理技術(shù)培訓(xùn)教材
- 美國(guó)AHA ACC高血壓管理指南(2025年)修訂要點(diǎn)解讀課件
評(píng)論
0/150
提交評(píng)論