




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單元9MySQL數據庫編程基礎《MySQL數據庫管理與應用任務式教程(慕課版)》學習內容任務1數據類型任務4函數數據庫系統的組成任務2常量與變量任務3運算符與表達式任務1數據類型任務5流程控制任務6游標任務1數據類型9.1.1數值類型類型名字節數可表示數的范圍無符號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)在數據表中存儲的一些數值,如商品銷售量、商品價格等,這類數據都適合用數值類型來表達,數值類型包括整型、浮點型等。各數值類型的名稱及使用范圍如表9-1、表9-2所示。表9-1數值類型—整數類型表9-1任務1數據類型
(2)在數據表中存儲的一些數值,如商品銷售量、商品價格等,這類數據都適合用數值類型來表達,數值類型,包括整型、浮點型等。各數值類型的名稱及使用范圍如表9-1、表9-2所示。表9-1數值類型—整數類型
表9-2類型名字節數可表示數的范圍無符號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相同任務1數據類型
表達數值型數據時,對涉及到小數的存儲就要使用浮點數或定點數表達,同時依據所要考慮到表達數的精度,浮點數又分為單精度浮點數float和雙精度浮點數double兩種類型。其中Float所表達的小數位數是5-6位,double雙精度所表達的小數位數可達到15位。
對于定點數類型decimal是通過decimal(m,d)來設置位數和精度的,其中m表示所有數據字符的總位數(不包括“.”和“-”),最大值為65,默認值為10,其中d表示小數位數據個數,最大值為30,默認值為0。在任務1數據類型9.1.2字符串類型(1)當所用數據是字符或字符串時就要用到字符串類型數據,MySQL支持兩類字符型數據:文本字符串和二進制字符串。文本字符串主要有char、varchar、binary、varbinary、blob、text等,二進制字符串主要有BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB等,常用的字符串類型如表9-3所示。
表3字符類型名字節數數據存儲描述Char(m)mm為0至255之間的整數Varchar(m)mm為0至65535之間的整數(默認)TextL+2允許長度為0至65535字節,列值的長度L+2個字節Binarym允許長度為0至m個字節的定長字節字符串Varbinarym允許長度為0至m個字節的變長字節字符串BlobL+2允許長度為0至65535字節,列值的長度L+2個字節ENUM1或2個取決于枚舉值的數目(最大值為65535)SET1、2、3、4或8取決于集合成員的數量(最多64個成員)任務1數據類型表示字符串類型數據時需用單引號將字符內容括起來。(1)char表示固定長度非二進制字符串。(2)varchar表示變長非二進制字符串,字段的最大值默認為65535,所默認對應的字符集是latin1,其他字符集如gbk其對應的m最大值為32766,utf8字符集對應的m最大值為21844。(3)文本類型text表示變長非二進制字符串,適用于存儲大量數據。它又分為TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT四種類型。不同的TEXT類型的存儲空間和數據長度不同。BINARY和VARBINARY類型類似于CHAR和VARCHAR,不同的是它們包含二進制字節字符串,BINARY類型的長度是固定的,指定長度后,不足最大長度的,將在它們右邊填充“\0”補齊,以達到指定長度。任務1數據類型
BLOB類型分為4種:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它們可容納值的最大長度不同。(1)BLOB列是字符集,并且排序和比較基于列值字節的數值;TEXT列有一個字符集,并且根據字符集對值進行排序和比較。(2)enum類型又稱枚舉類型,是一個字符串對象。(3)ENUM類型的字段在取值時,能在指定的枚舉列表中獲取,而且一次只能取一個。在MySQL中枚舉列表最多可以有65535個值,且每個值都有一個從1開始的順序編號,實際保存在記錄中的是順序編號而不是列表中的值。其定義格式如下。Enum('值1','值2',...,'值n')(4)set類型用于保存字符串對象,值為表創建時規定的一列值,SET列最多可以有64個成員。與ENUM類型相同,SET值在內部用整數表示,列表中每個值都有一個索引編號。不同的是SET類型的列可從定義的列值中選擇多個字符的聯合。其定義格式如下。Set('值1','值2',...,'值n')任務1數據類型9.1.3日期和時間類型在表達日期或時間之類的數據時將要用到日期和時間類型數據,MySQL數據庫提供的日期和時間類型有year、date、time、datetime和timestamp,可以用來表示不同范圍的日期或時間值,如表9-4所示。表9-4日期和時間類型名字節數數據存儲描述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任務1數據類型
year
類型用來僅表示年份,默認格式為YYYY。time類型用來僅表示時間,默認格式為HH:MM:SS,Time類型可以包含6位的毫秒微秒精度。小時字段可以超過24是因為time類型不光代表小時,也可以代表持續時長中的小時。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值將被分別轉換成0、0000-00-00、0000-00-0000:00:00。
year首字母大寫還是小寫?表中為小寫?任務2常量與變量9.2.1常量常量即是在數據操作或程序運行過程中值保持不變的量,如數值常量123,字符常量‘a’,默認值default0等。任務2常量與變量9.2.2變量變量是程序運行過程中數值可以發生變化的量,主要用來臨時存儲數據。變量的使用要遵循先定義(或聲明)后使用的原則(系統變量除外)。在MySQL中根據變量的作用范圍可以將變量劃分為系統變量(全局變量)、用戶自定義變量(會話變量)及局部變量。任務2常量與變量
1.系統變量系統變量也稱為全局變量,是MySQL系統內部定義的、具有某種功能的變量,形如@@變量名,如@@query_cache_limit等。系統變量對所有的MySQL客戶端都有效,默認情況下,會在服務器啟動時使用命令行上的選項或配置文件完成系統變量的設置,因此用戶不能再定義系統變量,但可以查看和修改變量值。(1)查看系統變量可使用showvariableslike'auto_%';語句查看系統變量。任務2常量與變量(2)修改系統變量的值在成功連接MySQL服務器,且系統變量被初始化后,用戶有時要根據實際需求對系統變量值作局部修改或全局修改。①局部修改系統變量的值
若修改的系統變量只需在本次連接中有效,且不影響其他連接MySQL服務器客戶端使用時,只能使用局部修改,基本語法如下。Set變量名=新值;例如,在一個客戶端上對系統變量auto_increment_offset的值作修改,在另一客戶端上看到的auto_increment_offset的值仍然是原值。
②全局修改系統變量的值對系統變量作全局修改對所有正在連接的客戶端無效,只對新連接的客戶端永久生效,基本語法如下。Setglobal變量名=值;或set@@global.變量名=值;
任務2常量與變量2.用戶自定義變量用戶自定義變量也稱為會話變量,是指由用戶根據需求進行定義的變量,跟MySQL當前客戶端是綁定的,且僅對當前用戶使用的客戶端有效。用戶自定義變量的語法如下。Select@變量名:=表達式值;或set@變量名=值;對用戶自定義變量定義時還必須為該變量賦初值,賦值方式有如下三種。任務2常量與變量(1)使用set命令set@變量名=表達式值;例如,set@xh='20200001';(2)使用select命令select@變量名:=字段值from表名;或select@變量名:=字段值[as輸出標識符名稱]from表名;注意:這里使用了賦值符號:=以區別于=。例如,select@xm:=姓名fromxswhere學號='001101';(3)使用select語句select字段名列表from表名into@變量名;例如,select學號,姓名,出生時間fromxslimit1into@xh,@xm,@csrq;任務2常量與變量3.局部變量相對于mysql提供的系統變量和用戶自定義的變量,局部變量的作用域僅在復合語句begin...end中,也就是只能在begin...end中定義和使用,超出范圍則無效。定義局部變量的語法如下。declare變量名數據類型[default默認值];任務3運算符與表達式9.3.1運算符
在數據庫的操作及程序中都會用運算符及表達式,表達式是程序語句的基本構成單位,是由運算符將常量、變量等對象連接起來構成的有意義的式子。
運算符用于執行程序代碼運算及操作數據項目運算。在MySQL中運算符分為算術運算符、關系運算符、賦值運算符和邏輯運算符等。1.算術運算符算術運算符適用于數值類型數據的運算。常用的算術運算符如表9-5所示。符號作用+加法運算-減法運算*乘法運算/除法運算div除法運算,結果去掉小數部分% (或mod)求余運算,返回余數表9-5任務3運算符與表達式在MySQL中若運算符“+”、“-”、“*”的操作數都是無符號整型,則運算結果也是無符號整型。運算符“/”在MySQL中用于除法操作,且運算結果使用浮點數表示,其浮點數的精度值等于被除數的精度加上系統變量div_precision_increment設置的除法精度增長值。運算符div運算時會去掉結果中的小數部分只返回整數部分。運算符“%”和mod在MySQL中功能相同,表達取模(求余)運算,其運算結果的正負與被模數(%左邊的操作數)的符號相同,與模數(%右邊的操作數)的符號無關。任務3運算符與表達式2.比較運算符比較運算符通常用于各類條件表達式中,常用的比較運算符如表9-6所示。表9-6符號作用=加法運算<
減法運算<=乘法運算>
除法運算>= 求余運算,返回余數<>或!=不等于Like‘區配模式’獲取匹配到的數據is比較一個數據是否是true,false或nuknown,若是則返回1否則返回0Isnot比較一個數據是否是true,false或nuknown,若不是則返回1否則返回0Isnull比較一個數據是否是null,若是返回1,否則返回0Between...and…比較一個數據是否在指定的閉區間范圍內,若在則返回1,若不在則返回0任務3運算符與表達式3.邏輯運算符邏輯運算符通常用于條件表達式的邏輯判斷,與比較運算符相配合運用,常用的運算符號如表9-7所示。參與邏輯運算的操作數以及邏輯判斷的結果是3種布爾型值,分別是真值(1或true)、假值(0或false)和空值(null)。表9-7符號作用AND或&&邏輯與運算,當操作數全為真(1),則結果為真(1);否則為假(0)OR或||邏輯或運算,當操作數中只要有一個為真(1),則結果為真(1);否則為假(0)NOT或!邏輯非運算,當操作數為真(1),則結果為假(0);當操作數為假(0),則結果為真(1)XOR邏輯異或,操作數一個為真(1),一個為假(0),則結果為真(1);若操作數全為真(1)或全為假(0),則結果為假(0)。任務3運算符與表達式4.位運算符位運算符是針對二進制數的每一位進行運算的符號,運算的結果類型為bigint,最大范圍可以是64位,常用的位運算符如表9-8所示。位運算必須先將數據轉換為二進制,然后在二進制格式下進行操作,運算完成后,將二進制的值轉換為原來的類型,返回給用戶。表9-8符號作用&按位與,將參與運算的兩個數據按對應的二進制數逐位進行邏輯與運算。若對應的二進制位都為1,則該位的運算結果為1,否則為0|按位或,將參與運算的兩個數據按對應的二進制數逐位進行邏輯或運算。若對應的二進制位有一個或兩個為1,則該位的運算結果為1,否則為0^按位異或,將參與運算的兩個數據按對應的二進制數逐位進行邏輯異或運算。對應的二進制位不同時,對應位的結果才為1。如果兩個對應位都為0或者都為1,則對應位的結果為0<<
按位左移,使指定的二進制值的所有位都左移指定的位數。左移指定位數之后,左邊高位的數值將被移出并丟棄,右邊低位空出的位置用0補齊。語法格式為:表達式<<n,這里n指定值要移位的位數>>
按位右移,使指定的二進制值的所有位都右移指定的位數。右移指定位數之后,右邊高位的數值將被移出并丟棄,左邊低位空出的位置用0補齊。語法格式為:表達式>>n,這里n指定值要移位的位數~按位取反,將參與運算的數據按對應的二進制數逐位反轉,即1取反后變0,0取反后變為1任務3運算符與表達式5.賦值運算符賦值運算符是一個較為特殊的算符,可以表示賦值,也可以用于比較數據是否相等。為確切表達其意義,用于賦值運算的符號為“:=”,在MySQL的insert…set和update…set語句中出現的運算符“=”也認為是賦值運算符。賦值運算符優先級最低。任務3運算符與表達式6.運算符的優先級運算符的優先級決定了不同的運算符在表達式中計算的先后順序。表9-9列出了MySQL中的各類運算符及其優先級。表9-9優先級(由高到低)運算符及功能描述1()括號2-(一元,負號)、~(一元,按位取反)3^按位異或4*(乘運算)、/(除運算)、%(取余運算)5-(減運算)、+(加運算)6<<(按位左移)、>>(按位右移)7&邏輯與8|邏輯或9=(等于)、<=>(可進行NULL值比較的相等運算符)、>=(大于等于)、>(大于)、<=(小于等于)、<(小于)、<>、!=(不等于)10NOT邏輯非11AND、&&邏輯與12XOR邏輯異或13:=賦值運算任務3運算符與表達式9.3.2表達式在MySQL中,表達式是一段邏輯代碼的表達,通常會涉及到常量、變量、運算符和函數等,最常見的表達式有如下幾種類型。1.一般表達式(1)常量或常數表達式一個常量就是一個最簡的表達式,如數值常量?0?和字符串常量‘abc’,分別表達某個具體數據,另外作為函數表達式中的參數或是select命令的輸出。例如,select?1,'hello',sqrt(4);(2)變量定義表達式Declare變量名數據類型;任務3運算符與表達式2.賦值語句表達式(1)set賦值表達式例如,set@xh='20220001';(2)select賦值表達式例如,select@xm:=姓名fromxswhere學號='001101';例如,selectconcat(‘my’,’sql’)--concat()為字符信息拼接函數任務3運算符與表達式3.條件表達式(1)在if語句中的表達式,如if(條件表達式,表達式1,表達式2)。(2)模糊匹配表達式,如Like或notlike語句表達式。(3)CASE語句表達式
任務4函數9.4.1內部函數函數是在數據庫中定義一些SQL語句的集合,主要用于計算并返回一個值。函數可以用來對數據表中的數據進行相應的處理,以便得到用戶希望得到的數據。在MySQL中,函數分為系統提供的內部函數和用戶自定義函數兩大類。MySQL提供的內部函數就像預定的公式一樣存放在數據庫里,每個用戶都可以調用已經存在的函數來完成某些特定的功能,簡化用戶的操作。這些內部函數主要有數學函數、字符串函數、日期和時間函數、數據類型轉換函數、條件判斷函數、系統信息函數、加密函數和格式化函數等。SELECT、INSERT、UPDATE和DELETE語句及其子句(例如WHERE、ORDERBY、HAVING等)中都可以使用內部函數。任務4函數1.數學函數數學函數主要用于處理數字。常用的數學函數及其功能如表9-10所示。表9-10函數名稱功能ABS(x)獲取x的絕對值MOD(x,y)求模運算,與x%y的功能相同SQRT(x)求x的平方根POW(x,y)或POWER(x,y)冪運算函數(計算x的y次方)EXP(x)計算e(自然對數的底約為2.71828)的x次方LOG(x)計算x的自然對數LOG10(x)計算以10為底的對數SIN(x)正弦函數ASIN(x)反正弦函數ROUND(x,[y])計算離x最近的整數;若設置參數y,與FORMAT(x,y)功能相同CEIL(x)或CEILING(x)返回大于等于x的最小整數FLOOR(x)返回小于等于x的最大整數TRUNCATE(x,y)返回小數點后保留y位的x(舍棄多余小數位,不進行四舍五入)FORMAT(x,y)返回小數點后保留y位的x(進行四舍五入)SIGN返回參數的符號RAND()默認返回[0,1]之間的隨機數PI()計算圓周率ASCII(c)返回字符c的ASCII碼(ASCII碼介于0~255)
CHAR(c1,c2,c3,…)將c1、c2、c3、…的ASCII碼轉換為字符,然后返回這些字符組成的字符串BIN(x)返回x的二進制數CONV(x,code1,code2)將code1進制的x變為code2進制數任務4函數2.數據類型轉換函數數據庫管理和操作經常需要對指定的數據類型轉換后才能獲取到想要的結果。常用的數據類型轉換函數及其功能如表9-11所示。表9-11函數名稱功能CONVERT(x,type)以type類型返回x,x可以是任何類型的表達式CONVERT(x
USING字符集)以指定字符集返回x數據,x可以是任何類型的表達式CAST(x
AS
type)以type類型返回x
,x可以是任何類型的表達式UNHEX(x)將x轉為十六進制數字,然后再轉為由數字表示的字符任務4函數3.字符串函數字符串函數主要用于處理字符串。常用的字符串函數及其功能如表9-12所示。表9-12函數名稱功能LENGTH計算字符串長度函數,返回字符串的字節長度CONCAT合并字符串函數,返回結果為連接參數產生的字符串,參數可以使一個或多個INSERT替換字符串函數LOWER將字符串中的字母轉換為小寫UPPER將字符串中的字母轉換為大寫LEFT從左側字截取符串,返回字符串左邊的若干個字符RIGHT從右側字截取符串,返回字符串右邊的若干個字符TRIM刪除字符串左右兩側的空格REPLACE字符串替換函數,返回替換后的新字符串SUBSTRING截取字符串,返回從指定位置開始的指定長度的字符換REVERSE字符串反轉(逆序)函數,返回與原始字符串順序相反的字符串STRCMP比較兩個字符串的大小INSTR返回子串在一個字符串中第一次出現的位置。與LOCATE()和POSITION(…IN…)函數等價,但參數順序不同。REPEAT重復指定次數的字符串,并保存到一個新字符串中SPACE重復指定次數的空格,并保存到一個新字符串中任務4函數4.日期和時間函數日期和時間函數主要用于處理日期和時間。常用的日期和時間函數及其功能如表9-13所示。表9-13函數名稱功能CURDATE和CURRENT_DATE兩個函數作用相同,返回當前系統的日期值CURTIME和CURRENT_TIME兩個函數作用相同,返回當前系統的時間值NOW
和SYSDATE兩個函數作用相同,返回當前系統的日期和時間值UNIX_TIMESTAMP獲取UNIX時間戳函數,返回一個以UNIX時間戳為基礎的無符號整數FROM_UNIXTIME將UNIX時間戳轉換為時間格式,與UNIX_TIMESTAMP互為反函數YEAR獲取年份,返回值范圍是1970?2069MONTH獲取指定日期中的月份WEEK獲取指定日期是一年中的第幾周,返回值的范圍是否為0?52或1?53DATE_FORMAT格式化指定的日期,根據參數返回指定格式的值WEEKDAY獲取指定日期在一周內的對應的工作日索引MONTHNAME獲取指定日期中的月份英文名稱DAYNAME獲取指定曰期對應的星期幾的英文名稱DAYOFWEEK獲取指定日期對應的一周的索引位置值DAYOFYEAR獲取指定曰期是一年中的第幾天,返回值范圍是1~366DAYOFMONTH獲取指定日期是一個月中是第幾天,返回值范圍是1~31TIME_TO_SEC將時間參數轉換為秒數SEC_TO_TIME將秒數轉換為時間,與TIME_TO_SEC互為反函數DATE_ADD和ADDDATE兩個函數功能相同,都是向日期添加指定的時間間隔DATE_SUB和SUBDATE兩個函數功能相同,都是向日期減去指定的時間間隔ADDTIME時間加法運算,在原始時間上添加指定的時間SUBTIME時間減法運算,在原始時間上減去指定的時間DATEDIFF獲取兩個日期之間間隔,返回參數1減去參數2的值任務4函數5.其他常用函數系統信息函數主要用于獲取MySQL數據庫的系統信息。加密函數主要用于對字符串進行加密解密。條件判斷函數主要用于在SQL語句中控制條件選表9-14函數名稱功能VERSION()用于獲取當前MySQL服務實例使用的MySQL版本號DATABASE()用于獲取當前操作的數據庫,與SCHEMA()函數等價USER()用于獲取登錄服務器的主機地址及用戶名,與SYSTEM_USER()和SESSION_USER()函數等價CURRENT_USER()用于獲取該賬戶名允許通過哪些登錄主機連接MySQL服務器CONNECTION_ID()用于獲取當前MySQL服務器的連接IDMD5()使用MD5計算并返回一個32位的字符串AES_ENCRYPT()使用密鑰對字符串進行加密,默認返回一個128位的二進制數AES_DECRYPT()使用密鑰對密碼進行解密SHA1()或SHA()利用安全散列算法SHA-1字符串,返回40個十六進制數字組成的字符串SHA2()利用安全散列算法SHA-2字符串
ENCODE()使用密鑰對字符串進行編碼,默認返回一個二進制數DECODE()使用密鑰對密碼進行解碼PASSWORD()計算并返回一個41位的密碼字符串
任務4函數【例題9.1】獲取系統當前日期時間、MySQL版本號、連接數和數據庫名。mysql>SELECTCURDATE(),VERSION(),CONNECTION_ID(),DATABASE();任務4函數9.4.2用戶自定義函數用戶可以根據需要編寫自定義函數來實現某種特定的功能。使用自定義函數可以避免重復編寫相同的SQL語句,提高代碼的重用性,減少客戶端和服務器的數據傳輸。1.創建用戶自定義函數在MySQL中,使用CREATEFUNCTION語句來創建自定義函數,其語法格式如下。CREATEFUNCTION函數名(參數名數據類型,…)RETURNS返回值類型
[BEGIN]
函數體
RETURN返回值數據;
[END]
任務4函數說明:(1)創建函數時,函數名不能與已經存在的函數名重名。(2)參數部分可以由多個參數組成。不同于存儲過程,函數的參數類型只能是IN。(3)結構中定義的返回值數據必須與定義的返回值類型一致,否則,返回值將被強制為恰當的類型。(4)函數體可以用BEGIN...END來標示SQL代碼的開始和結束。任務4函數【例題9.2】在成績管理數據庫cjgl中,創建根據學生表xs中的某個學號查詢學生姓名的函數。執行如下SQL語句。mysql>DELIMITER//mysql>CREATEFUNCTIONfunc_xsxm(idchar(6))->RETURNSCHAR(6)->COMMENT'查詢某個學生的姓名'->RETURN(SELECT姓名FROMxsWHERExs.學號=id);->//mysql>DELIMITER;代碼中的DELIMITER是MySQL分隔符,在MySQL客戶端中分隔符默認是分號。如果一次輸入的語句較多,并且語句中間有分號,這時需要新指定一個特殊的分隔符(如//)告訴MySQL解釋器該段命令是否已經結束。本例中,通過命令DELIMITER//將SQL語句的結束符由“;”修改為“//”,最后通過命令DELIMITER;將結束符號修改回默認的結束符號;。任務4函數2.調用用戶自定義函數在MySQL中,使用用戶自定義函數的方法與使用內部函數的方法相同,只需要通過SELECT關鍵字并指定函數的名稱和參數即可。如,mysql>SELECTfunc_xsxm('001101');+---------------------+|func_xsxm('001101')|+----------------------------+|王金華|+----------------------------+1rowinset(0.00sec)任務4函數3.管理用戶自定義函數(1)可以用SHOWCREATEFUNCTION命令查看函數的定義。如,mysql>SHOWCREATEFUNCTIONfunc_xsxm\G
(2)可以用ALTERFUNCTION命令查看函數狀態及系統中所有自定義函數。如,mysql>SHOWFUNCTIONSTATUSLIKE'func_xsxm';
(3)可以用ALTERFUNCTION命令修改用戶自定義函數。
(4)可以用DROPFUNCTION命令刪除數據庫中函數。如,mysql>DROPFUNCTIONIFEXISTSfunc_xsxm;任務5流程控制9.5.1順序結構在MySQL中,可以使用流程控制語句來控制程序的流程。常用的流程控制語句有:IF語句、CASE語句、LOOP語句、REPEAT語句和WHILE語句、LEAVE語句、ITERATE語句等。順序結構是指程序的執行順序無邏輯跳轉,依次按語句的先后執行,即程序結構中無分支、無循環語句順序執行。例如,BEGINdeclarex1intdefaut1;declarex2char(2)default'男';...END;任務5流程控制9.5.2分支結構及分支語句分支結構是指程序根據是否滿足條件,來執行不同的語句。在MySQL中,表達分支結構的分支語句有如下2種形式。1.if語句這種語句適用于SQL語句中的條件判斷,其語法結構如下。If(條件表達式,表達式1,表達式2)當條件表達式值為真時,返回表達式1的值,否則返回表達式2的值。
任務5流程控制2.if...then語句這種語句適用于在函數、存儲過程等程序中實現復雜的SQL操作,其語法結構如下。if條件式1then語句1elseif條件式2then語句2...else語句nendif當條件式1為真時,就執行對應的語句1,否則,就繼續判斷條件式2的真假,為真則執行語句2,如此完成所有的判斷后,若所有的條件式都為假,則執行else后的語句n。
任務5流程控制3.case語句CASE語句提供了多個條件進行選擇。它有兩種語法形式。(1)語法格式1CASE條件表達式WHEN表達式1THEN語句1[WHEN表達式2THEN語句2]...[ELSE語句n]ENDCASE任務5流程控制用case的條件表達式與when后的子句的表達式進行比較,直到與其中的一個表達式相等,則執行then后對應的語句。(2)語法格式2CASEWHEN條件表達式1THEN語句1[WHEN條件表達式2THEN語句2]...[ELSE語句n]ENDCASE任務5流程控制與格式1不同的是,格式2中的WHEN語句將被逐個執行,直到某個條件表達式為真,則執行后面對應的語句。如果沒有條件匹配,ELSE子句里的語句被執行。【例題9.3】輸出成績的不同等級(優、良、及格、不及格)。打開MySQLWorkbench,在查詢窗口編輯如下語句并執行,結果如圖9-1所示。SELECTxh,cj,(casewhencj>=90then'優'whencj<90andcj>=80then'良'whencj<80andcj>=60then'及格'else'不及格'end)as'成績等級'FROMcj;任務5流程控制9.5.3循環結構及循環語句循環結構是程序中常見結構之一,循環語句指的是符合指定條件的情況下,重復執行一段代碼。在MySQL中實現循環結構的語句有3種形式:LOOP、REPEAT和WHILE循環。任務5流程控制1.LOOP循環用于實現一個簡單的循環操作,基本語法格式如下。[標簽:]LOOP
語句列表Endloop[標簽]【例題9.4】loop循環示例。任務5流程控制通過MySQL命令行客戶端執行如下語句。DELIMITER//#更改語句結束標志為//DROPPROCEDUREIFEXISTStest1;#如果存在test1存儲過程則刪除CREATEPROCEDUREtest1()#創建無參存儲過程test1BEGINDECLAREiINT;#申明變量SETi=0;#變量賦值
lp:LOOP
#lp為循環體名INSERTINTOtestVALUES(i+11,'test','20');
#向test表中添加數據SETi=i+1;#循環一次,i加一IFi>10THEN
#結束循環的條件:當i大于10時跳出loop循環LEAVElp;ENDIF;ENDLOOP;SELECT*FROMtest;#查看test表數據END//CALLtest();#調用存儲過程
DELIMITER;#重新將分隔符設置為;任務5流程控制2.REPEAT循環通常用于實現一個提供REPEAT循環條件表達式符合執行的操作,其語法格式如下。[標簽:]REPEAT語句列表Until條件表達式EndREPEAT[標簽];【例題9.5】repeat循環示例。主要代碼如下。SETi=0;REPEATINSERTINTOtestVALUES(i+11,'test','20');
#向test表中添加數據SETi=i+1;#循環一次,i加1UNTILi>10ENDREPEAT;#當i大于10時跳出repeat任務5流程控制3.WHILE循環用于創建一個帶條件的循環過程,在執行WHILE語句時,要先滿足條件表達式的要求,否則不會執行對應的循環操作語句,其語法格式如下。[標簽:]WHILE條件表達式DO
語句列表EndWHILE[標簽]【例題9.6】while循環示例。主要代碼如下。SETi=0;WHILEi<5DO#當i大于5時跳出while循環INSERTINTOtestVALUES(i+11,'test','20');#向test表中添加數據SETi=i+1;#循環一次,i加1ENDWHILE;任務6游標1.游標的作用在使用SELECT語句時,雖然可以通過WHERE子句來限制只有一條記錄被選中,但沒有辦法對結果集中的記錄逐條單獨處理,這種情況下,我們就需要借助游標機制來實現。游標是一種數據訪問機制,允許用戶訪問包含多條數據記錄的結果集中的某一行,類似C語言中指針的功能。一般通過游標定位到結果集的某一行記錄進行瀏覽或修改。任務6游標2.使用游標(1)聲明游標游標必須先聲明再使用,聲明游標的語法格式如下。DECLARE游標名CURSORFORSELECT語句;SELECT語句可以根據需要添加WHERE和其它子句,返回一行或多行數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025倉庫場地租賃合同書范本
- 2024年智能體脂秤資金需求報告代可行性研究報告
- 2024年海洋測量儀器資金需求報告代可行性研究報告
- 殘障人士專項技能培訓及兼職工作合同
- 海外市場產品推廣效果評估補充協議
- 網紅炸雞連鎖品牌區域代理授權書
- 植物基因改良與品種培育戰略合作協議
- 網約車平臺司機加盟業務拓展及收益分成協議
- 高效影視特效場景搭建與施工進度跟蹤合同
- 網紅炸雞品牌醬料研發、采購、配送及售后保障協議
- 妊娠甲狀腺疾病指南
- 醫學大數據分析與挖掘
- NB-T 47013.15-2021 承壓設備無損檢測 第15部分:相控陣超聲檢測
- 我國上市公司IPO前后“業績變臉”的實證研究-基于創業板的分析的中期報告
- 老年人神經健康講座內容摘要
- 燃用重質渣油的鋁合金熔煉爐能耗測試與分析
- (新教材)細胞核是細胞生命活動的控制中心(公開課)課件
- 點穴保健DIY智慧樹知到課后章節答案2023年下江西中醫藥大學
- 企業安全生產風險辨識評估管控指導手冊-危險貨物儲罐倉儲
- 攝錄像技術基礎
- 煙花爆竹勞務合同范本
評論
0/150
提交評論