MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元9 mysql 數(shù)據(jù)庫編程基礎(chǔ)_第1頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元9 mysql 數(shù)據(jù)庫編程基礎(chǔ)_第2頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元9 mysql 數(shù)據(jù)庫編程基礎(chǔ)_第3頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元9 mysql 數(shù)據(jù)庫編程基礎(chǔ)_第4頁
MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(微課版)單元9 mysql 數(shù)據(jù)庫編程基礎(chǔ)_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

單元9MySQL數(shù)據(jù)庫編程基礎(chǔ)《MySQL數(shù)據(jù)庫管理與應(yīng)用任務(wù)式教程(慕課版)》學(xué)習(xí)內(nèi)容任務(wù)1數(shù)據(jù)類型任務(wù)4函數(shù)數(shù)據(jù)庫系統(tǒng)的組成任務(wù)2常量與變量任務(wù)3運算符與表達式任務(wù)1數(shù)據(jù)類型任務(wù)5流程控制任務(wù)6游標(biāo)任務(wù)1數(shù)據(jù)類型9.1.1數(shù)值類型類型名字節(jié)數(shù)可表示數(shù)的范圍無符號unsigned有符號signbigint80~264-1即(0~18446744073709551615)-263~263即(-9233372036854775808~9233372036854775807)int40~232-1即(0~4294967295)-231~231即(-2147483648~2147483647)mediumint30~224~1即(0~16777215)-223~223即(-8388608~8388607)smallint20~216-1即(0~65535)-215~215即(-32768~32767)tinyint10~28-1即(0~255)-27~27即(-128~127)

(1)在數(shù)據(jù)表中存儲的一些數(shù)值,如商品銷售量、商品價格等,這類數(shù)據(jù)都適合用數(shù)值類型來表達,數(shù)值類型包括整型、浮點型等。各數(shù)值類型的名稱及使用范圍如表9-1、表9-2所示。表9-1數(shù)值類型—整數(shù)類型表9-1任務(wù)1數(shù)據(jù)類型

(2)在數(shù)據(jù)表中存儲的一些數(shù)值,如商品銷售量、商品價格等,這類數(shù)據(jù)都適合用數(shù)值類型來表達,數(shù)值類型,包括整型、浮點型等。各數(shù)值類型的名稱及使用范圍如表9-1、表9-2所示。表9-1數(shù)值類型—整數(shù)類型

表9-2類型名字節(jié)數(shù)可表示數(shù)的范圍無符號unsigned有符號signfloat40和1.175494351E-38~3.402823466E+38-3.402823466E+38~-1.175494351E-38double80和2.2250738585072014E-308~1.7976931348623157E+308-1.7976931348623157E+308~-2.2250738585072014E-308decimal(m,d)m+2最大取值范圍與DOUBLE相同最大取值范圍與DOUBLE相同任務(wù)1數(shù)據(jù)類型

表達數(shù)值型數(shù)據(jù)時,對涉及到小數(shù)的存儲就要使用浮點數(shù)或定點數(shù)表達,同時依據(jù)所要考慮到表達數(shù)的精度,浮點數(shù)又分為單精度浮點數(shù)float和雙精度浮點數(shù)double兩種類型。其中Float所表達的小數(shù)位數(shù)是5-6位,double雙精度所表達的小數(shù)位數(shù)可達到15位。

對于定點數(shù)類型decimal是通過decimal(m,d)來設(shè)置位數(shù)和精度的,其中m表示所有數(shù)據(jù)字符的總位數(shù)(不包括“.”和“-”),最大值為65,默認值為10,其中d表示小數(shù)位數(shù)據(jù)個數(shù),最大值為30,默認值為0。在任務(wù)1數(shù)據(jù)類型9.1.2字符串類型(1)當(dāng)所用數(shù)據(jù)是字符或字符串時就要用到字符串類型數(shù)據(jù),MySQL支持兩類字符型數(shù)據(jù):文本字符串和二進制字符串。文本字符串主要有char、varchar、binary、varbinary、blob、text等,二進制字符串主要有BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB等,常用的字符串類型如表9-3所示。

表3字符類型名字節(jié)數(shù)數(shù)據(jù)存儲描述Char(m)mm為0至255之間的整數(shù)Varchar(m)mm為0至65535之間的整數(shù)(默認)TextL+2允許長度為0至65535字節(jié),列值的長度L+2個字節(jié)Binarym允許長度為0至m個字節(jié)的定長字節(jié)字符串Varbinarym允許長度為0至m個字節(jié)的變長字節(jié)字符串BlobL+2允許長度為0至65535字節(jié),列值的長度L+2個字節(jié)ENUM1或2個取決于枚舉值的數(shù)目(最大值為65535)SET1、2、3、4或8取決于集合成員的數(shù)量(最多64個成員)任務(wù)1數(shù)據(jù)類型表示字符串類型數(shù)據(jù)時需用單引號將字符內(nèi)容括起來。(1)char表示固定長度非二進制字符串。(2)varchar表示變長非二進制字符串,字段的最大值默認為65535,所默認對應(yīng)的字符集是latin1,其他字符集如gbk其對應(yīng)的m最大值為32766,utf8字符集對應(yīng)的m最大值為21844。(3)文本類型text表示變長非二進制字符串,適用于存儲大量數(shù)據(jù)。它又分為TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT四種類型。不同的TEXT類型的存儲空間和數(shù)據(jù)長度不同。BINARY和VARBINARY類型類似于CHAR和VARCHAR,不同的是它們包含二進制字節(jié)字符串,BINARY類型的長度是固定的,指定長度后,不足最大長度的,將在它們右邊填充“\0”補齊,以達到指定長度。任務(wù)1數(shù)據(jù)類型

BLOB類型分為4種:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它們可容納值的最大長度不同。(1)BLOB列是字符集,并且排序和比較基于列值字節(jié)的數(shù)值;TEXT列有一個字符集,并且根據(jù)字符集對值進行排序和比較。(2)enum類型又稱枚舉類型,是一個字符串對象。(3)ENUM類型的字段在取值時,能在指定的枚舉列表中獲取,而且一次只能取一個。在MySQL中枚舉列表最多可以有65535個值,且每個值都有一個從1開始的順序編號,實際保存在記錄中的是順序編號而不是列表中的值。其定義格式如下。Enum('值1','值2',...,'值n')(4)set類型用于保存字符串對象,值為表創(chuàng)建時規(guī)定的一列值,SET列最多可以有64個成員。與ENUM類型相同,SET值在內(nèi)部用整數(shù)表示,列表中每個值都有一個索引編號。不同的是SET類型的列可從定義的列值中選擇多個字符的聯(lián)合。其定義格式如下。Set('值1','值2',...,'值n')任務(wù)1數(shù)據(jù)類型9.1.3日期和時間類型在表達日期或時間之類的數(shù)據(jù)時將要用到日期和時間類型數(shù)據(jù),MySQL數(shù)據(jù)庫提供的日期和時間類型有year、date、time、datetime和timestamp,可以用來表示不同范圍的日期或時間值,如表9-4所示。表9-4日期和時間類型名字節(jié)數(shù)數(shù)據(jù)存儲描述year1取值范圍為1901到2155time3可以包含6位的毫秒微秒精度,其取值范圍為-838:59:59.000000到838:59:59.000000date4可表達日期范圍1000-01-01至9999-12-31datetime8可表達時間范圍1000-01-0100:00:00至9999-12-3123:59:59timestamp4可表達日期時間范圍1970-01-0100:00:01到2038-01-1903:14:07任務(wù)1數(shù)據(jù)類型

year

類型用來僅表示年份,默認格式為YYYY。time類型用來僅表示時間,默認格式為HH:MM:SS,Time類型可以包含6位的毫秒微秒精度。小時字段可以超過24是因為time類型不光代表小時,也可以代表持續(xù)時長中的小時。date類型僅用來表示日期,默認的格式為yyyy-mm-dd。datetime類型用來表示日期和時間,默認的格式為yyyy-mm-ddhh:mi:ss。timestamp類型也用來表示日期和時間。datetime和timestamp兩個類型都可以保存到微妙級別,即6位毫秒微妙精度,即1000-01-0100:00:00.000000到9999-12-3123:59:59.999999和1970-01-0100:00:01.000000到2038-01-1903:14:07.999999。非法的date、datetime、timestamp值將被分別轉(zhuǎn)換成0、0000-00-00、0000-00-0000:00:00。

year首字母大寫還是小寫?表中為小寫?任務(wù)2常量與變量9.2.1常量常量即是在數(shù)據(jù)操作或程序運行過程中值保持不變的量,如數(shù)值常量123,字符常量‘a(chǎn)’,默認值default0等。任務(wù)2常量與變量9.2.2變量變量是程序運行過程中數(shù)值可以發(fā)生變化的量,主要用來臨時存儲數(shù)據(jù)。變量的使用要遵循先定義(或聲明)后使用的原則(系統(tǒng)變量除外)。在MySQL中根據(jù)變量的作用范圍可以將變量劃分為系統(tǒng)變量(全局變量)、用戶自定義變量(會話變量)及局部變量。任務(wù)2常量與變量

1.系統(tǒng)變量系統(tǒng)變量也稱為全局變量,是MySQL系統(tǒng)內(nèi)部定義的、具有某種功能的變量,形如@@變量名,如@@query_cache_limit等。系統(tǒng)變量對所有的MySQL客戶端都有效,默認情況下,會在服務(wù)器啟動時使用命令行上的選項或配置文件完成系統(tǒng)變量的設(shè)置,因此用戶不能再定義系統(tǒng)變量,但可以查看和修改變量值。(1)查看系統(tǒng)變量可使用showvariableslike'auto_%';語句查看系統(tǒng)變量。任務(wù)2常量與變量(2)修改系統(tǒng)變量的值在成功連接MySQL服務(wù)器,且系統(tǒng)變量被初始化后,用戶有時要根據(jù)實際需求對系統(tǒng)變量值作局部修改或全局修改。①局部修改系統(tǒng)變量的值

若修改的系統(tǒng)變量只需在本次連接中有效,且不影響其他連接MySQL服務(wù)器客戶端使用時,只能使用局部修改,基本語法如下。Set變量名=新值;例如,在一個客戶端上對系統(tǒng)變量auto_increment_offset的值作修改,在另一客戶端上看到的auto_increment_offset的值仍然是原值。

②全局修改系統(tǒng)變量的值對系統(tǒng)變量作全局修改對所有正在連接的客戶端無效,只對新連接的客戶端永久生效,基本語法如下。Setglobal變量名=值;或set@@global.變量名=值;

任務(wù)2常量與變量2.用戶自定義變量用戶自定義變量也稱為會話變量,是指由用戶根據(jù)需求進行定義的變量,跟MySQL當(dāng)前客戶端是綁定的,且僅對當(dāng)前用戶使用的客戶端有效。用戶自定義變量的語法如下。Select@變量名:=表達式值;或set@變量名=值;對用戶自定義變量定義時還必須為該變量賦初值,賦值方式有如下三種。任務(wù)2常量與變量(1)使用set命令set@變量名=表達式值;例如,set@xh='20200001';(2)使用select命令select@變量名:=字段值from表名;或select@變量名:=字段值[as輸出標(biāo)識符名稱]from表名;注意:這里使用了賦值符號:=以區(qū)別于=。例如,select@xm:=姓名fromxswhere學(xué)號='001101';(3)使用select語句select字段名列表from表名into@變量名;例如,select學(xué)號,姓名,出生時間fromxslimit1into@xh,@xm,@csrq;任務(wù)2常量與變量3.局部變量相對于mysql提供的系統(tǒng)變量和用戶自定義的變量,局部變量的作用域僅在復(fù)合語句begin...end中,也就是只能在begin...end中定義和使用,超出范圍則無效。定義局部變量的語法如下。declare變量名數(shù)據(jù)類型[default默認值];任務(wù)3運算符與表達式9.3.1運算符

在數(shù)據(jù)庫的操作及程序中都會用運算符及表達式,表達式是程序語句的基本構(gòu)成單位,是由運算符將常量、變量等對象連接起來構(gòu)成的有意義的式子。

運算符用于執(zhí)行程序代碼運算及操作數(shù)據(jù)項目運算。在MySQL中運算符分為算術(shù)運算符、關(guān)系運算符、賦值運算符和邏輯運算符等。1.算術(shù)運算符算術(shù)運算符適用于數(shù)值類型數(shù)據(jù)的運算。常用的算術(shù)運算符如表9-5所示。符號作用+加法運算-減法運算*乘法運算/除法運算div除法運算,結(jié)果去掉小數(shù)部分% (或mod)求余運算,返回余數(shù)表9-5任務(wù)3運算符與表達式在MySQL中若運算符“+”、“-”、“*”的操作數(shù)都是無符號整型,則運算結(jié)果也是無符號整型。運算符“/”在MySQL中用于除法操作,且運算結(jié)果使用浮點數(shù)表示,其浮點數(shù)的精度值等于被除數(shù)的精度加上系統(tǒng)變量div_precision_increment設(shè)置的除法精度增長值。運算符div運算時會去掉結(jié)果中的小數(shù)部分只返回整數(shù)部分。運算符“%”和mod在MySQL中功能相同,表達取模(求余)運算,其運算結(jié)果的正負與被模數(shù)(%左邊的操作數(shù))的符號相同,與模數(shù)(%右邊的操作數(shù))的符號無關(guān)。任務(wù)3運算符與表達式2.比較運算符比較運算符通常用于各類條件表達式中,常用的比較運算符如表9-6所示。表9-6符號作用=加法運算<

減法運算<=乘法運算>

除法運算>= 求余運算,返回余數(shù)<>或!=不等于Like‘區(qū)配模式’獲取匹配到的數(shù)據(jù)is比較一個數(shù)據(jù)是否是true,false或nuknown,若是則返回1否則返回0Isnot比較一個數(shù)據(jù)是否是true,false或nuknown,若不是則返回1否則返回0Isnull比較一個數(shù)據(jù)是否是null,若是返回1,否則返回0Between...and…比較一個數(shù)據(jù)是否在指定的閉區(qū)間范圍內(nèi),若在則返回1,若不在則返回0任務(wù)3運算符與表達式3.邏輯運算符邏輯運算符通常用于條件表達式的邏輯判斷,與比較運算符相配合運用,常用的運算符號如表9-7所示。參與邏輯運算的操作數(shù)以及邏輯判斷的結(jié)果是3種布爾型值,分別是真值(1或true)、假值(0或false)和空值(null)。表9-7符號作用AND或&&邏輯與運算,當(dāng)操作數(shù)全為真(1),則結(jié)果為真(1);否則為假(0)OR或||邏輯或運算,當(dāng)操作數(shù)中只要有一個為真(1),則結(jié)果為真(1);否則為假(0)NOT或!邏輯非運算,當(dāng)操作數(shù)為真(1),則結(jié)果為假(0);當(dāng)操作數(shù)為假(0),則結(jié)果為真(1)XOR邏輯異或,操作數(shù)一個為真(1),一個為假(0),則結(jié)果為真(1);若操作數(shù)全為真(1)或全為假(0),則結(jié)果為假(0)。任務(wù)3運算符與表達式4.位運算符位運算符是針對二進制數(shù)的每一位進行運算的符號,運算的結(jié)果類型為bigint,最大范圍可以是64位,常用的位運算符如表9-8所示。位運算必須先將數(shù)據(jù)轉(zhuǎn)換為二進制,然后在二進制格式下進行操作,運算完成后,將二進制的值轉(zhuǎn)換為原來的類型,返回給用戶。表9-8符號作用&按位與,將參與運算的兩個數(shù)據(jù)按對應(yīng)的二進制數(shù)逐位進行邏輯與運算。若對應(yīng)的二進制位都為1,則該位的運算結(jié)果為1,否則為0|按位或,將參與運算的兩個數(shù)據(jù)按對應(yīng)的二進制數(shù)逐位進行邏輯或運算。若對應(yīng)的二進制位有一個或兩個為1,則該位的運算結(jié)果為1,否則為0^按位異或,將參與運算的兩個數(shù)據(jù)按對應(yīng)的二進制數(shù)逐位進行邏輯異或運算。對應(yīng)的二進制位不同時,對應(yīng)位的結(jié)果才為1。如果兩個對應(yīng)位都為0或者都為1,則對應(yīng)位的結(jié)果為0<<

按位左移,使指定的二進制值的所有位都左移指定的位數(shù)。左移指定位數(shù)之后,左邊高位的數(shù)值將被移出并丟棄,右邊低位空出的位置用0補齊。語法格式為:表達式<<n,這里n指定值要移位的位數(shù)>>

按位右移,使指定的二進制值的所有位都右移指定的位數(shù)。右移指定位數(shù)之后,右邊高位的數(shù)值將被移出并丟棄,左邊低位空出的位置用0補齊。語法格式為:表達式>>n,這里n指定值要移位的位數(shù)~按位取反,將參與運算的數(shù)據(jù)按對應(yīng)的二進制數(shù)逐位反轉(zhuǎn),即1取反后變0,0取反后變?yōu)?任務(wù)3運算符與表達式5.賦值運算符賦值運算符是一個較為特殊的算符,可以表示賦值,也可以用于比較數(shù)據(jù)是否相等。為確切表達其意義,用于賦值運算的符號為“:=”,在MySQL的insert…set和update…set語句中出現(xiàn)的運算符“=”也認為是賦值運算符。賦值運算符優(yōu)先級最低。任務(wù)3運算符與表達式6.運算符的優(yōu)先級運算符的優(yōu)先級決定了不同的運算符在表達式中計算的先后順序。表9-9列出了MySQL中的各類運算符及其優(yōu)先級。表9-9優(yōu)先級(由高到低)運算符及功能描述1()括號2-(一元,負號)、~(一元,按位取反)3^按位異或4*(乘運算)、/(除運算)、%(取余運算)5-(減運算)、+(加運算)6<<(按位左移)、>>(按位右移)7&邏輯與8|邏輯或9=(等于)、<=>(可進行NULL值比較的相等運算符)、>=(大于等于)、>(大于)、<=(小于等于)、<(小于)、<>、!=(不等于)10NOT邏輯非11AND、&&邏輯與12XOR邏輯異或13:=賦值運算任務(wù)3運算符與表達式9.3.2表達式在MySQL中,表達式是一段邏輯代碼的表達,通常會涉及到常量、變量、運算符和函數(shù)等,最常見的表達式有如下幾種類型。1.一般表達式(1)常量或常數(shù)表達式一個常量就是一個最簡的表達式,如數(shù)值常量?0?和字符串常量‘a(chǎn)bc’,分別表達某個具體數(shù)據(jù),另外作為函數(shù)表達式中的參數(shù)或是select命令的輸出。例如,select?1,'hello',sqrt(4);(2)變量定義表達式Declare變量名數(shù)據(jù)類型;任務(wù)3運算符與表達式2.賦值語句表達式(1)set賦值表達式例如,set@xh='20220001';(2)select賦值表達式例如,select@xm:=姓名fromxswhere學(xué)號='001101';例如,selectconcat(‘my’,’sql’)--concat()為字符信息拼接函數(shù)任務(wù)3運算符與表達式3.條件表達式(1)在if語句中的表達式,如if(條件表達式,表達式1,表達式2)。(2)模糊匹配表達式,如Like或notlike語句表達式。(3)CASE語句表達式

任務(wù)4函數(shù)9.4.1內(nèi)部函數(shù)函數(shù)是在數(shù)據(jù)庫中定義一些SQL語句的集合,主要用于計算并返回一個值。函數(shù)可以用來對數(shù)據(jù)表中的數(shù)據(jù)進行相應(yīng)的處理,以便得到用戶希望得到的數(shù)據(jù)。在MySQL中,函數(shù)分為系統(tǒng)提供的內(nèi)部函數(shù)和用戶自定義函數(shù)兩大類。MySQL提供的內(nèi)部函數(shù)就像預(yù)定的公式一樣存放在數(shù)據(jù)庫里,每個用戶都可以調(diào)用已經(jīng)存在的函數(shù)來完成某些特定的功能,簡化用戶的操作。這些內(nèi)部函數(shù)主要有數(shù)學(xué)函數(shù)、字符串函數(shù)、日期和時間函數(shù)、數(shù)據(jù)類型轉(zhuǎn)換函數(shù)、條件判斷函數(shù)、系統(tǒng)信息函數(shù)、加密函數(shù)和格式化函數(shù)等。SELECT、INSERT、UPDATE和DELETE語句及其子句(例如WHERE、ORDERBY、HAVING等)中都可以使用內(nèi)部函數(shù)。任務(wù)4函數(shù)1.數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù)主要用于處理數(shù)字。常用的數(shù)學(xué)函數(shù)及其功能如表9-10所示。表9-10函數(shù)名稱功能ABS(x)獲取x的絕對值MOD(x,y)求模運算,與x%y的功能相同SQRT(x)求x的平方根POW(x,y)或POWER(x,y)冪運算函數(shù)(計算x的y次方)EXP(x)計算e(自然對數(shù)的底約為2.71828)的x次方LOG(x)計算x的自然對數(shù)LOG10(x)計算以10為底的對數(shù)SIN(x)正弦函數(shù)ASIN(x)反正弦函數(shù)ROUND(x,[y])計算離x最近的整數(shù);若設(shè)置參數(shù)y,與FORMAT(x,y)功能相同CEIL(x)或CEILING(x)返回大于等于x的最小整數(shù)FLOOR(x)返回小于等于x的最大整數(shù)TRUNCATE(x,y)返回小數(shù)點后保留y位的x(舍棄多余小數(shù)位,不進行四舍五入)FORMAT(x,y)返回小數(shù)點后保留y位的x(進行四舍五入)SIGN返回參數(shù)的符號RAND()默認返回[0,1]之間的隨機數(shù)PI()計算圓周率ASCII(c)返回字符c的ASCII碼(ASCII碼介于0~255)

CHAR(c1,c2,c3,…)將c1、c2、c3、…的ASCII碼轉(zhuǎn)換為字符,然后返回這些字符組成的字符串BIN(x)返回x的二進制數(shù)CONV(x,code1,code2)將code1進制的x變?yōu)閏ode2進制數(shù)任務(wù)4函數(shù)2.數(shù)據(jù)類型轉(zhuǎn)換函數(shù)數(shù)據(jù)庫管理和操作經(jīng)常需要對指定的數(shù)據(jù)類型轉(zhuǎn)換后才能獲取到想要的結(jié)果。常用的數(shù)據(jù)類型轉(zhuǎn)換函數(shù)及其功能如表9-11所示。表9-11函數(shù)名稱功能CONVERT(x,type)以type類型返回x,x可以是任何類型的表達式CONVERT(x

USING字符集)以指定字符集返回x數(shù)據(jù),x可以是任何類型的表達式CAST(x

AS

type)以type類型返回x

,x可以是任何類型的表達式UNHEX(x)將x轉(zhuǎn)為十六進制數(shù)字,然后再轉(zhuǎn)為由數(shù)字表示的字符任務(wù)4函數(shù)3.字符串函數(shù)字符串函數(shù)主要用于處理字符串。常用的字符串函數(shù)及其功能如表9-12所示。表9-12函數(shù)名稱功能LENGTH計算字符串長度函數(shù),返回字符串的字節(jié)長度CONCAT合并字符串函數(shù),返回結(jié)果為連接參數(shù)產(chǎn)生的字符串,參數(shù)可以使一個或多個INSERT替換字符串函數(shù)LOWER將字符串中的字母轉(zhuǎn)換為小寫UPPER將字符串中的字母轉(zhuǎn)換為大寫LEFT從左側(cè)字截取符串,返回字符串左邊的若干個字符RIGHT從右側(cè)字截取符串,返回字符串右邊的若干個字符TRIM刪除字符串左右兩側(cè)的空格REPLACE字符串替換函數(shù),返回替換后的新字符串SUBSTRING截取字符串,返回從指定位置開始的指定長度的字符換REVERSE字符串反轉(zhuǎn)(逆序)函數(shù),返回與原始字符串順序相反的字符串STRCMP比較兩個字符串的大小INSTR返回子串在一個字符串中第一次出現(xiàn)的位置。與LOCATE()和POSITION(…IN…)函數(shù)等價,但參數(shù)順序不同。REPEAT重復(fù)指定次數(shù)的字符串,并保存到一個新字符串中SPACE重復(fù)指定次數(shù)的空格,并保存到一個新字符串中任務(wù)4函數(shù)4.日期和時間函數(shù)日期和時間函數(shù)主要用于處理日期和時間。常用的日期和時間函數(shù)及其功能如表9-13所示。表9-13函數(shù)名稱功能CURDATE和CURRENT_DATE兩個函數(shù)作用相同,返回當(dāng)前系統(tǒng)的日期值CURTIME和CURRENT_TIME兩個函數(shù)作用相同,返回當(dāng)前系統(tǒng)的時間值NOW

和SYSDATE兩個函數(shù)作用相同,返回當(dāng)前系統(tǒng)的日期和時間值UNIX_TIMESTAMP獲取UNIX時間戳函數(shù),返回一個以UNIX時間戳為基礎(chǔ)的無符號整數(shù)FROM_UNIXTIME將UNIX時間戳轉(zhuǎn)換為時間格式,與UNIX_TIMESTAMP互為反函數(shù)YEAR獲取年份,返回值范圍是1970?2069MONTH獲取指定日期中的月份WEEK獲取指定日期是一年中的第幾周,返回值的范圍是否為0?52或1?53DATE_FORMAT格式化指定的日期,根據(jù)參數(shù)返回指定格式的值WEEKDAY獲取指定日期在一周內(nèi)的對應(yīng)的工作日索引MONTHNAME獲取指定日期中的月份英文名稱DAYNAME獲取指定曰期對應(yīng)的星期幾的英文名稱DAYOFWEEK獲取指定日期對應(yīng)的一周的索引位置值DAYOFYEAR獲取指定曰期是一年中的第幾天,返回值范圍是1~366DAYOFMONTH獲取指定日期是一個月中是第幾天,返回值范圍是1~31TIME_TO_SEC將時間參數(shù)轉(zhuǎn)換為秒數(shù)SEC_TO_TIME將秒數(shù)轉(zhuǎn)換為時間,與TIME_TO_SEC互為反函數(shù)DATE_ADD和ADDDATE兩個函數(shù)功能相同,都是向日期添加指定的時間間隔DATE_SUB和SUBDATE兩個函數(shù)功能相同,都是向日期減去指定的時間間隔ADDTIME時間加法運算,在原始時間上添加指定的時間SUBTIME時間減法運算,在原始時間上減去指定的時間DATEDIFF獲取兩個日期之間間隔,返回參數(shù)1減去參數(shù)2的值任務(wù)4函數(shù)5.其他常用函數(shù)系統(tǒng)信息函數(shù)主要用于獲取MySQL數(shù)據(jù)庫的系統(tǒng)信息。加密函數(shù)主要用于對字符串進行加密解密。條件判斷函數(shù)主要用于在SQL語句中控制條件選表9-14函數(shù)名稱功能VERSION()用于獲取當(dāng)前MySQL服務(wù)實例使用的MySQL版本號DATABASE()用于獲取當(dāng)前操作的數(shù)據(jù)庫,與SCHEMA()函數(shù)等價USER()用于獲取登錄服務(wù)器的主機地址及用戶名,與SYSTEM_USER()和SESSION_USER()函數(shù)等價CURRENT_USER()用于獲取該賬戶名允許通過哪些登錄主機連接MySQL服務(wù)器CONNECTION_ID()用于獲取當(dāng)前MySQL服務(wù)器的連接IDMD5()使用MD5計算并返回一個32位的字符串AES_ENCRYPT()使用密鑰對字符串進行加密,默認返回一個128位的二進制數(shù)AES_DECRYPT()使用密鑰對密碼進行解密SHA1()或SHA()利用安全散列算法SHA-1字符串,返回40個十六進制數(shù)字組成的字符串SHA2()利用安全散列算法SHA-2字符串

ENCODE()使用密鑰對字符串進行編碼,默認返回一個二進制數(shù)DECODE()使用密鑰對密碼進行解碼PASSWORD()計算并返回一個41位的密碼字符串

任務(wù)4函數(shù)【例題9.1】獲取系統(tǒng)當(dāng)前日期時間、MySQL版本號、連接數(shù)和數(shù)據(jù)庫名。mysql>SELECTCURDATE(),VERSION(),CONNECTION_ID(),DATABASE();任務(wù)4函數(shù)9.4.2用戶自定義函數(shù)用戶可以根據(jù)需要編寫自定義函數(shù)來實現(xiàn)某種特定的功能。使用自定義函數(shù)可以避免重復(fù)編寫相同的SQL語句,提高代碼的重用性,減少客戶端和服務(wù)器的數(shù)據(jù)傳輸。1.創(chuàng)建用戶自定義函數(shù)在MySQL中,使用CREATEFUNCTION語句來創(chuàng)建自定義函數(shù),其語法格式如下。CREATEFUNCTION函數(shù)名(參數(shù)名數(shù)據(jù)類型,…)RETURNS返回值類型

[BEGIN]

函數(shù)體

RETURN返回值數(shù)據(jù);

[END]

任務(wù)4函數(shù)說明:(1)創(chuàng)建函數(shù)時,函數(shù)名不能與已經(jīng)存在的函數(shù)名重名。(2)參數(shù)部分可以由多個參數(shù)組成。不同于存儲過程,函數(shù)的參數(shù)類型只能是IN。(3)結(jié)構(gòu)中定義的返回值數(shù)據(jù)必須與定義的返回值類型一致,否則,返回值將被強制為恰當(dāng)?shù)念愋?。?)函數(shù)體可以用BEGIN...END來標(biāo)示SQL代碼的開始和結(jié)束。任務(wù)4函數(shù)【例題9.2】在成績管理數(shù)據(jù)庫cjgl中,創(chuàng)建根據(jù)學(xué)生表xs中的某個學(xué)號查詢學(xué)生姓名的函數(shù)。執(zhí)行如下SQL語句。mysql>DELIMITER//mysql>CREATEFUNCTIONfunc_xsxm(idchar(6))->RETURNSCHAR(6)->COMMENT'查詢某個學(xué)生的姓名'->RETURN(SELECT姓名FROMxsWHERExs.學(xué)號=id);->//mysql>DELIMITER;代碼中的DELIMITER是MySQL分隔符,在MySQL客戶端中分隔符默認是分號。如果一次輸入的語句較多,并且語句中間有分號,這時需要新指定一個特殊的分隔符(如//)告訴MySQL解釋器該段命令是否已經(jīng)結(jié)束。本例中,通過命令DELIMITER//將SQL語句的結(jié)束符由“;”修改為“//”,最后通過命令DELIMITER;將結(jié)束符號修改回默認的結(jié)束符號;。任務(wù)4函數(shù)2.調(diào)用用戶自定義函數(shù)在MySQL中,使用用戶自定義函數(shù)的方法與使用內(nèi)部函數(shù)的方法相同,只需要通過SELECT關(guān)鍵字并指定函數(shù)的名稱和參數(shù)即可。如,mysql>SELECTfunc_xsxm('001101');+---------------------+|func_xsxm('001101')|+----------------------------+|王金華|+----------------------------+1rowinset(0.00sec)任務(wù)4函數(shù)3.管理用戶自定義函數(shù)(1)可以用SHOWCREATEFUNCTION命令查看函數(shù)的定義。如,mysql>SHOWCREATEFUNCTIONfunc_xsxm\G

(2)可以用ALTERFUNCTION命令查看函數(shù)狀態(tài)及系統(tǒng)中所有自定義函數(shù)。如,mysql>SHOWFUNCTIONSTATUSLIKE'func_xsxm';

(3)可以用ALTERFUNCTION命令修改用戶自定義函數(shù)。

(4)可以用DROPFUNCTION命令刪除數(shù)據(jù)庫中函數(shù)。如,mysql>DROPFUNCTIONIFEXISTSfunc_xsxm;任務(wù)5流程控制9.5.1順序結(jié)構(gòu)在MySQL中,可以使用流程控制語句來控制程序的流程。常用的流程控制語句有:IF語句、CASE語句、LOOP語句、REPEAT語句和WHILE語句、LEAVE語句、ITERATE語句等。順序結(jié)構(gòu)是指程序的執(zhí)行順序無邏輯跳轉(zhuǎn),依次按語句的先后執(zhí)行,即程序結(jié)構(gòu)中無分支、無循環(huán)語句順序執(zhí)行。例如,BEGINdeclarex1intdefaut1;declarex2char(2)default'男';...END;任務(wù)5流程控制9.5.2分支結(jié)構(gòu)及分支語句分支結(jié)構(gòu)是指程序根據(jù)是否滿足條件,來執(zhí)行不同的語句。在MySQL中,表達分支結(jié)構(gòu)的分支語句有如下2種形式。1.if語句這種語句適用于SQL語句中的條件判斷,其語法結(jié)構(gòu)如下。If(條件表達式,表達式1,表達式2)當(dāng)條件表達式值為真時,返回表達式1的值,否則返回表達式2的值。

任務(wù)5流程控制2.if...then語句這種語句適用于在函數(shù)、存儲過程等程序中實現(xiàn)復(fù)雜的SQL操作,其語法結(jié)構(gòu)如下。if條件式1then語句1elseif條件式2then語句2...else語句nendif當(dāng)條件式1為真時,就執(zhí)行對應(yīng)的語句1,否則,就繼續(xù)判斷條件式2的真假,為真則執(zhí)行語句2,如此完成所有的判斷后,若所有的條件式都為假,則執(zhí)行else后的語句n。

任務(wù)5流程控制3.case語句CASE語句提供了多個條件進行選擇。它有兩種語法形式。(1)語法格式1CASE條件表達式WHEN表達式1THEN語句1[WHEN表達式2THEN語句2]...[ELSE語句n]ENDCASE任務(wù)5流程控制用case的條件表達式與when后的子句的表達式進行比較,直到與其中的一個表達式相等,則執(zhí)行then后對應(yīng)的語句。(2)語法格式2CASEWHEN條件表達式1THEN語句1[WHEN條件表達式2THEN語句2]...[ELSE語句n]ENDCASE任務(wù)5流程控制與格式1不同的是,格式2中的WHEN語句將被逐個執(zhí)行,直到某個條件表達式為真,則執(zhí)行后面對應(yīng)的語句。如果沒有條件匹配,ELSE子句里的語句被執(zhí)行?!纠}9.3】輸出成績的不同等級(優(yōu)、良、及格、不及格)。打開MySQLWorkbench,在查詢窗口編輯如下語句并執(zhí)行,結(jié)果如圖9-1所示。SELECTxh,cj,(casewhencj>=90then'優(yōu)'whencj<90andcj>=80then'良'whencj<80andcj>=60then'及格'else'不及格'end)as'成績等級'FROMcj;任務(wù)5流程控制9.5.3循環(huán)結(jié)構(gòu)及循環(huán)語句循環(huán)結(jié)構(gòu)是程序中常見結(jié)構(gòu)之一,循環(huán)語句指的是符合指定條件的情況下,重復(fù)執(zhí)行一段代碼。在MySQL中實現(xiàn)循環(huán)結(jié)構(gòu)的語句有3種形式:LOOP、REPEAT和WHILE循環(huán)。任務(wù)5流程控制1.LOOP循環(huán)用于實現(xiàn)一個簡單的循環(huán)操作,基本語法格式如下。[標(biāo)簽:]LOOP

語句列表Endloop[標(biāo)簽]【例題9.4】loop循環(huán)示例。任務(wù)5流程控制通過MySQL命令行客戶端執(zhí)行如下語句。DELIMITER//#更改語句結(jié)束標(biāo)志為//DROPPROCEDUREIFEXISTStest1;#如果存在test1存儲過程則刪除CREATEPROCEDUREtest1()#創(chuàng)建無參存儲過程test1BEGINDECLAREiINT;#申明變量SETi=0;#變量賦值

lp:LOOP

#lp為循環(huán)體名INSERTINTOtestVALUES(i+11,'test','20');

#向test表中添加數(shù)據(jù)SETi=i+1;#循環(huán)一次,i加一IFi>10THEN

#結(jié)束循環(huán)的條件:當(dāng)i大于10時跳出loop循環(huán)LEAVElp;ENDIF;ENDLOOP;SELECT*FROMtest;#查看test表數(shù)據(jù)END//CALLtest();#調(diào)用存儲過程

DELIMITER;#重新將分隔符設(shè)置為;任務(wù)5流程控制2.REPEAT循環(huán)通常用于實現(xiàn)一個提供REPEAT循環(huán)條件表達式符合執(zhí)行的操作,其語法格式如下。[標(biāo)簽:]REPEAT語句列表Until條件表達式EndREPEAT[標(biāo)簽];【例題9.5】repeat循環(huán)示例。主要代碼如下。SETi=0;REPEATINSERTINTOtestVALUES(i+11,'test','20');

#向test表中添加數(shù)據(jù)SETi=i+1;#循環(huán)一次,i加1UNTILi>10ENDREPEAT;#當(dāng)i大于10時跳出repeat任務(wù)5流程控制3.WHILE循環(huán)用于創(chuàng)建一個帶條件的循環(huán)過程,在執(zhí)行WHILE語句時,要先滿足條件表達式的要求,否則不會執(zhí)行對應(yīng)的循環(huán)操作語句,其語法格式如下。[標(biāo)簽:]WHILE條件表達式DO

語句列表EndWHILE[標(biāo)簽]【例題9.6】while循環(huán)示例。主要代碼如下。SETi=0;WHILEi<5DO#當(dāng)i大于5時跳出while循環(huán)INSERTINTOtestVALUES(i+11,'test','20');#向test表中添加數(shù)據(jù)SETi=i+1;#循環(huán)一次,i加1ENDWHILE;任務(wù)6游標(biāo)1.游標(biāo)的作用在使用SELECT語句時,雖然可以通過WHERE子句來限制只有一條記錄被選中,但沒有辦法對結(jié)果集中的記錄逐條單獨處理,這種情況下,我們就需要借助游標(biāo)機制來實現(xiàn)。游標(biāo)是一種數(shù)據(jù)訪問機制,允許用戶訪問包含多條數(shù)據(jù)記錄的結(jié)果集中的某一行,類似C語言中指針的功能。一般通過游標(biāo)定位到結(jié)果集的某一行記錄進行瀏覽或修改。任務(wù)6游標(biāo)2.使用游標(biāo)(1)聲明游標(biāo)游標(biāo)必須先聲明再使用,聲明游標(biāo)的語法格式如下。DECLARE游標(biāo)名CURSORFORSELECT語句;SELECT語句可以根據(jù)需要添加WHERE和其它子句,返回一行或多行數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論