第7章 习题答案_第1页
第7章 习题答案_第2页
第7章 习题答案_第3页
第7章 习题答案_第4页
第7章 习题答案_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章习题答案习题1答案使用SELECT语句输出各种数据类型的常量时,MySQL主要通过隐式类型转换规则处理数据类型,核心原则是“适配输出场景,优先兼容目标数据类型”,具体转换逻辑如下:数值型常量(如整数123、小数3.14):直接以原始数值类型输出;若与其他类型常量拼接(如SELECT123+'45'),会将字符串常量隐式转为数值型后计算,最终输出数值型结果。字符串型常量(如'abc'、'123'):默认以字符串类型输出;若参与数值运算(如SELECT'123'+45),会尝试将字符串转为数值型(可转换则参与运算,不可转换则视为0)。日期时间型常量(如'2025-01-01'、'12:30:00'):需符合MySQL日期时间格式(YYYY-MM-DD、HH:MM:SS等),否则会隐式转为字符串或0输出;若与数值运算(如SELECT'2025-01-01'+1),会将日期转为对应的数值timestamp后计算。布尔型常量(TRUE/FALSE):MySQL中无严格布尔型,TRUE隐式转为1,FALSE隐式转为0,输出时以数值型呈现。核心总结:转换的核心目的是保证运算或输出的合法性,转换优先级为“日期时间型>数值型>字符串型”(特殊场景除外)。习题2答案一、相同之处1.均与“当前MySQL会话”强相关,仅在当前会话内有效,关闭会话后失效;2.变量名大小写不敏感;3.均可存储单个值(单行单列数据)。二、核心区别来源与用途不同:会话系统变量是MySQL内置变量,用于控制当前会话的数据库行为(如sql_mode、autocommit);用户变量是用户自定义的临时变量,用于存储会话内的中间数据(如计算结果、查询结果)。定义与使用方式不同:会话系统变量无需定义,可直接通过“SELECT@@变量名”读取或“SET@@变量名=值”修改;用户变量必须先定义(通过SET或SELECT赋值),否则取值为NULL。命名规范不同:会话系统变量通常有固定命名(如wait_timeout),引用时需加@@前缀(@@session.变量名可省略session);用户变量命名灵活,必须加@前缀(如@user_name)。数据类型特性不同:会话系统变量有固定数据类型(由MySQL定义),值必须符合类型要求;用户变量是动态类型,数据类型由赋值表达式结果决定(可动态切换类型)。习题3答案一、相同之处变量名大小写不敏感;均只能存储单个值(单行单列数据),若赋值多行多列数据会抛出错误;赋值方式相同,均可通过SET语句或SELECT...INTO语句赋值;赋值时数据类型需兼容(否则可能触发隐式转换或错误)。二、核心区别(对应章节7.7总结表)对比维度用户变量(如SET@row_no=0;)局部变量(如DECLAREageINT;)命名规范必须以@开头,可与字段名重名不能以@开头,不可与字段名重名(避免歧义)定义方式通过SET或SELECT语句赋值时自动定义仅能通过DECLARE语句定义(或作为存储程序形参)初始化要求定义时必须赋值(否则为NULL)可省略初始化(默认值为NULL),也可通过DEFAULT指定初始值数据类型动态类型,由赋值表达式决定(可动态切换)静态类型,定义时必须指定数据类型(值需兼容类型)使用范围可在MySQL客户机直接使用,也可在存储程序内使用仅能在存储程序(函数、存储过程、触发器)内使用,无法在客户机直接使用作用域与生命周期作用域为整个会话,跨存储程序可见,关闭会话后失效作用域为定义它的BEGIN...END语句块,语句块执行结束后失效线程安全性同一会话内多线程共享,线程不安全线程私有,线程安全习题4答案为用户变量或局部变量赋值时,需重点注意以下事项:赋值与定义的关联性:用户变量必须“定义与赋值同时进行”(无单独定义语句,赋值即定义);局部变量需先通过DECLARE定义(或作为形参),再赋值(否则报错)。取值限制:无论哪种变量,均只能存储“单行单列值”;若赋值多行数据(如SET@x=(SELECTnameFROMstudent),且student表多行),会抛出1242(子查询返回多行)错误。数据类型兼容性:局部变量有固定数据类型,赋值时需与定义类型兼容(如INT类型变量不可赋值长字符串,否则抛1406错误);用户变量虽为动态类型,但赋值后参与运算时需注意类型匹配(如字符串与数值混合运算可能导致意外结果)。存储程序内的赋值限制:在函数、存储过程等存储程序内赋值时,禁止使用会产生结果集的方式(如海象赋值符SELECT@x:=1),仅可使用SET语句或SELECT...INTO语句(避免产生结果集导致编译错误)。中文字符处理:若变量需存储中文字符(如局部变量存储姓名),需在定义时指定UTF8MB4字符集(如DECLAREnameCHAR(20)CHARACTERSETutf8mb4),否则可能出现乱码或1366(字符串值不正确)错误。变量名与字段名冲突:局部变量名不可与SQL语句中的字段名重名(如SELECTstudent_noINTOnoFROMstudentWHEREstudent_no=no,若no是局部变量,会导致逻辑错误);用户变量因带@前缀,可与字段名重名(MySQL解析器可区分)。赋值语句的结果集控制:用户变量使用SELECT语句赋值时(如海象赋值符)会产生结果集;使用SET语句或SELECT...INTO语句赋值时无结果集;存储程序内优先使用无结果集的赋值方式。习题5答案编写MySQL存储程序(函数、存储过程、触发器)时需要重置结束标记(delimiter),核心原因是解决“语句块内分号与默认结束符冲突”的问题,具体逻辑如下:默认结束符的局限性:MySQL客户机默认以“;”作为SQL语句的结束标记,执行完带“;”的语句后会立即提交给服务器执行。存储程序的语句块特性:存储程序的函数体由BEGIN...END包裹,内部包含多条SQL语句,每条语句需用“;”分隔(如变量定义、逻辑判断、查询等)。冲突的后果:若不重置结束标记,当客户机解析存储程序定义语句时,会将BEGIN...END内的第一个“;”视为整个存储程序定义的结束符,导致后续代码被拆分,无法正确创建存储程序(编译报错)。重置的作用:通过delimiter命令将结束标记临时改为非“;”的符号(如$$、//),使客户机将存储程序体内的“;”视为语句分隔符,而非整个程序的结束符;待存储程序定义完成后,再将结束标记恢复为“;”,不影响后续常规SQL执行。示例逻辑:delimiter$$→定义存储程序(体内用;分隔语句)→$$→delimiter;,确保程序整体被完整解析。习题6答案sum()、avg()、count()、max()、min()均为MySQL内置聚合函数,用于对一组数据(通常是查询结果集的某一列)进行统计计算,核心功能如下:sum(列名/表达式):计算指定列或表达式的“数值总和”。忽略NULL值;若所有值均为NULL,返回0;仅支持数值类型(非数值类型会隐式转为数值,转换失败则视为0)。示例:SELECTSUM(score)FROMexam;(计算考试总分)。avg(列名/表达式):计算指定列或表达式的“算术平均值”。计算逻辑为“总和/非NULL值的行数”(忽略NULL值);若所有值均为NULL,返回NULL;仅支持数值类型。示例:SELECTAVG(score)FROMexam;(计算平均成绩)。count(参数):统计结果集中的“行数”,参数支持3种形式:

示例:SELECTCOUNT(*)FROMstudent;(统计学生总数)。count(*):统计所有行数(包括NULL值行、空字符串行),是最常用且高效的方式;count(列名):统计指定列“非NULL值”的行数(忽略NULL值);count(1):等价于count(*)(统计所有行数),部分场景下性能与count(*)一致。max(列名/表达式):获取指定列或表达式的“最大值”。忽略NULL值;若所有值均为NULL,返回NULL;支持数值、字符串、日期时间类型(字符串按字符集排序规则比较,日期按时间先后比较)。示例:SELECTMAX(score)FROMexam;(取最高分)。min(列名/表达式):获取指定列或表达式的“最小值”。逻辑与max()一致,仅结果为最小值。示例:SELECTMIN(join_date)FROMemployee;(取最早入职日期)。补充说明:聚合函数常与GROUPBY子句结合实现分组统计,未分组时默认对整个结果集统计。习题7答案get_date_fn()函数的核心功能是:接收一个DATETIME类型的参数,将其格式化为“YYYY年MM月DD日hh时ii分ss秒”格式的字符串并返回,具体拆解如下:函数参数与返回值定义:

参数gdate:数据类型为DATETIME,用于接收需要格式化的日期时间数据(如NOW()返回的当前时间);返回值:VARCHAR(255)类型(字符串),并指定UTF8MB4字符集(确保中文格式符号“年、月、日、时、分、秒”正常显示)。函数体逻辑:

定义局部变量x:VARCHAR(255)类型,默认值为空字符串,用于存储格式化后的结果;格式化核心操作:通过DATE_FORMAT()函数将参数gdate按指定格式转换——%Y(4位年)、%m(2位月)、%d(2位日)、%h(12小时制小时)、%i(2位分)、%s(2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论