版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 托班安全主题课程设计
- 2024年灵活用工雇佣合同
- 戏剧作品解读课程设计
- 有关四季的课程设计
- 机电底架课程设计
- 电力工程总经理合同范本
- 厨房设备装卸人员招聘合同
- 2024年外籍教师就业保障及培训服务合同3篇
- 微机课程设计电子时钟
- 供热工程课程设计唐山
- 二年级上册数学教案-做家务-北师大版
- 2022年9月国家开放大学本科《中国法律史》期末纸质考试试题及答案
- 2024年贵州专业技术继续教育公需科目考试试题及答案
- 2024年秋七年级生物上册 2.1.2 植物细胞教案 (新版)新人教版
- 2024国网国中康健集团招聘74人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 人教版九年级全册英语Unit 8大单元整体教学设计
- 国家开放大学电大《建筑制图基础》机考第三套真题及答案
- 食品安全处理事故制度
- 学习笔记:-11-酒店业务涉及税目(易混淆)划分及开票的问题
- DL∕T 1934-2018 火力发电厂直接空冷系统运行导则
- 2024版小学六年级上册心理健康模拟试卷
评论
0/150
提交评论