MySQL实教程(新体系-综合应用实例视频)(第4版)习题及答案汇 郑阿奇 -第01-10_第1页
MySQL实教程(新体系-综合应用实例视频)(第4版)习题及答案汇 郑阿奇 -第01-10_第2页
MySQL实教程(新体系-综合应用实例视频)(第4版)习题及答案汇 郑阿奇 -第01-10_第3页
MySQL实教程(新体系-综合应用实例视频)(第4版)习题及答案汇 郑阿奇 -第01-10_第4页
MySQL实教程(新体系-综合应用实例视频)(第4版)习题及答案汇 郑阿奇 -第01-10_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

第1章数据库基础-习题一、选择题1.MySQL是()。A.数据库 B.DBA C.DBMS D.数据库系统2.MySQL组织数据采用()。A.层次模型 B.网状模型 C.关系模型 D.数据模型3.()是实体属性。A.形状 B.汽车 C.盘子 D.高铁4.在数据库管理系统中设计表属于()。A.概念结构设计 B.逻辑结构设计 C.物理结构设计 D.数据库设计5.图书与读者之间是()。A.一对一关系 B.多对一关系 C.多对多关系 D.一对多关系6.普通用户通过()操作数据库对象。A.DBMS B.SQL C.MySQL的SQL D.应用程序7.用()平台开发的程序是C/S程序。A.Spring B.PHP C.Android D.ASP.NET8.下列说法错误的是()。A.数据库通过文件存放在计算机中 B.数据库中的数据具有一定的关系C.浏览器中的脚本可操作数据库 D.浏览器中运行的文件存放在服务器中二、说明题1.什么是数据库,它的用途是什么?2.数据库、数据库管理系统、数据库系统、数据库应用系统、数据库管理员的关系。3.什么是数据模型?关系模型的特点。4.说明关系模型中的表、记录、码、主码的关系。5.解释概念模型中的以下术语:实体,属性,码,E-R图。6.某高校中有若干个系部,每个系部有若干个年级和教研室,每个教研室有若干个教师,其中有教授和副教授每人带若干个研究生,每个年级有许多学生,每个学生选修若干课程,每门课可由很多学生选修,试用E-R图描述此学校的概念模型。7.试举出一个自己身边的关系模型例子,并用E-R图来描述。8.比较C/S架构应用系统和B/S架构应用系统的特点。参考答案习题-第01章一、选择题 1.C 2.C 3.A 4.B 5.B 6.D 7.C 8.C二、说明题 1.数据库(DB)是存放数据的仓库,而且这些数据存在一定的关联,并按一定的格式存放在计算机内。例如,把一个学校的学生、课程、成绩等数据有序地组织并存放在计算机内,就可以构成一个数据库。今天数据库在几乎所有的计算机软件应用系统中作为后台管理数据的容器,有着不可或缺的作用,互联网上任何一个网站的背后都有着一个数据库作支撑。 2.数据库是按照某种数据模型组织数据的文件;数据库管理系统是对数据库进行管理的系统软件;数据库管理员是通过数据库管理系统等工具操作数据库的人员;数据库应用系统是运行在前端的应用程序及应用服务器,提供友好的界面供普通用户使用数据库的应用软件系统。数据库、数据库管理系统与操作数据库的应用程序,加上支撑它们的软硬件平台和与数据库有关的人员一起构成了一个完整的数据库系统。 3.数据模型是数据库管理系统对数据库中数据进行存储和管理所依据的逻辑模型。关系模型的特点是以记录组或二维数据表的形式组织数据。 4.关系模型以二维表存放数据,表中的一行称为一个记录、一列称为一个字段,如果一个或几个字段组合的值可唯一标识其对应记录,则称该字段或字段组合为码。一个表可能有多个码,通常指定一个码为“主码”。 5.每一类数据对象的个体称为“实体”;每个实体集涉及的信息项称为属性;如果实体集中的属性或最小属性组合的值能唯一标识其对应实体,则将该属性或属性组合称为码。码可能有多个,对于每一个实体集,可指定一个码为主码。E-R图就是E-R模型的描述方法,即实体-联系图。 6.略。 7.略。 8.C/S架构应用系统是两层(客户端/服务器)模式,由客户端(Client)应用程序直接与用户交互,应用程序在有需要的时候向数据库管理系统提出服务请求,而数据库管理系统则为应用程序提供服务,通常称为服务器(Server),它对客户端应用程序的请求进行分析,然后执行数据库操作,并把处理结果返回给应用程序;B/S架构应用系统是三层(浏览器/Web服务器/数据库服务器)模式,浏览器(Browser)是用户输入数据和显示结果的交互界面,用户在浏览器表单中输入数据,然后将表单中的数据提交并发送到Web服务器,Web服务器接收并处理用户的数据,再通过数据库服务器,从数据库中查询所需要的数据(或把数据录入数据库)回送Web服务器,Web服务器把返回的结果插入HTML页面,传送给客户端,在浏览器中显示出来。两种架构的应用系统中,数据库管理系统皆不直接与用户打交道。第2章MySQL安装、运行和工具一、多选题1.MySQL安装说法错误的是()。A.MySQL所有版本都是开源的B.一台计算机上同一版本MySQL可以安装多个不同实例C.安装时可以指定root用户的登录密码D.可以指定MySQL的安装目录E.可以仅安装MySQL服务器F.可以仅安装MySQL客户端程序2.MySQL的运行说法错误的是()。A.在MySQL安装目录中才能找到MySQL运行程序B.MySQL服务程序可以在Windows服务程序中找到C.Windows命令行窗口登录命令可以不直接包含用户登录密码D.Navicat通过连接登录MySQL.E.可以通过MySQL安装的客户端登录MySQLF.MySQL操作没有Web方式3.提升root用户权限说法错误的是()。A.使初学者可以方便测试MySQL各种功能B.不提权限就不能进行操作C.提升权限是MySQL语句D.提升root用户权限后登录方式不同4.简单操作数据库说法错误的是()。A.必须首先创建数据库,然后在数据库中创建表B.已经创建的数据库必须删除才能重新创建C.数据库必须打开后才能对数据库进行操作D.不能在系统数据库中创建用户表E.已经创建的数据库重新创建就会出错5.操作数据库表说法错误的是()。A.必须用CREATETABLE创建表B.Navicat不能显示CREATETABLE创建表C.INSERT插入的值的顺序固定的D.INSERT可以修改表记录E.UPDATE修改记录不需要指定列名F.可以用Navicat增加修改删除记录G.只能删除所有记录H.删除表记录表结构还存在6.查询表说法错误的是()。A.可以查询所有记录所有列B.可以查询输出部分列C.可以查询符合条件的记录D.输出记录的顺序只能是递增的二、说明题1.MySQL8默认的安装路径是什么?如何修改为用户希望的目录?2.安装MySQL时root用户属于什么用户,它有什么权限?3.为什么需要服务器配置?主要配置哪些内容?端口号起什么作用?4.一台主机可以安装相同或者不同版本的MySQL服务器吗?5.如何判断MySQL服务器已经运行?6.为什么运行MySQL需要进入MySQL安装目录?7.为什么首次登录MySQL只能采用root用户,root登录密码是何时指定的?8.显示mysql>提示符表示什么状态?9.为什么需要提升root用户权限?10.什么是MySQL界面工具,分哪两大类?11.在Navicat下为什么必须在创建的连接下操作?12.在mysql>状态和在Navicat下操作的数据库对象效果相同吗?13.如何才能在本地操作网络上的其他主机的MySQL服务器?参考答案习题-第02章一、选择题 1.A 2.F 3.BD 4.D 5.BEG 6.D二、说明题1.MySQL系统的默认安装路径:C:\ProgramFiles\MySQL\MySQLServer8.0。若想修改为用户希望的目录,在安装向导的“ChoosingaSetupType”页选中“Custom”后,在SelectProductsandFeatures界面右下方会出现“AdvancedOptions”链接,可将系统默认的安装路径设定为其他目录。2.根用户(即数据库管理员用户),对数据库拥有不受限制的访问权限。3.MySQL在Windows操作系统中是以一个服务实例进程的形态运行于后台的,故在启动它之前必须进行配置,实际安装后就立马进入配置向导,配置的内容包括:服务器类型、root账号密码、角色设置、Windows服务运行参数和插件连接MySQL数据库参数等。端口号可用于标识同一台计算机上的多个MySQL服务实例。4.可以。5.打开Windows任务管理器,在“进程”页可以看到MySQL进程mysqld.exe,或在Windows系统“服务”页查看对应名为“MySQL80”的服务是否处于运行状态。6.如果MySQL服务器没有配置成自动启动,就只能进入MySQL安装目录手动启动。7.root是MySQL的第一个用户,安装后就存在,故首次登录MySQL只能采用root用户,root登录密码也是在安装MySQL时由用户自己设定的。8.显示mysql>提示符表示已经进入到MySQL的命令行模式,自此所输入的命令全部发送至MySQL服务器。9.在操作MySQL时,不同操作系统默认的权限差异可能导致用户无法使用某些功能,给初学者学习MySQL造成不必要的困扰,所以需要提升root用户权限。10.MySQL界面工具是一类可视化的工具软件,它们支持以图形化甚至Web页的方式操作MySQL数据库,MySQL的界面工具可分为两大类:图形化客户端和基于Web的管理工具。11.原因:(1)一个MySQL可能有不同用户访问它,不同用户因为权限不同,需要创建不同的连接;(2)在系统开发时可能使用一个以上的MySQL服务器,操作不同的MySQL服务器也需要创建不同的连接。12.相同。13.要操作网络上的其他主机的MySQL服务器,需要在创建连接时指定MySQL所在的服务器主机名或IP地址,并指定端口号。第3章数据类型一、选择最适合类型,说明原因。1.性别列适合选择()。 A.bit B.int C.enum D.char2.出生时间列适合选择()。 A.date B.char C.timestamp D.datetime3年龄列适合选择()。 A.year B.tinyint C.unsignedtinyint D.char(3)4销售总额适合选择()。 A.bigint B.float C.decimal D.double5备注适合选择()。 A.char B.varchar C.varbinary D.text6学号适合选择()。 A.char B.varchar C.int D.unsignedint7兴趣适合选择()。 A.varchar B.enum C.set D.text8照片适合选择()。 A.blob B.binary C.varchar D.mediumblob9.专业适合选择()。 A.enum B.set C.varchar D.int10.密码适合选择()。 A.int B.char C.varchar D.unsignedbigint11.地址适合选择()。 A.json B.char C.varchar D.text12.位置适合选择()。 A.geometry B.char C.varchar D.point13.电子围栏适合选择()。 A.geometry B.point C.polygon D.multipolygon14.树形结构数据适合选择()。 A.text B.json C.varchar D.multipolygon15.类型不同数组适合选择()。 A.blob B.varchar C.json D.binary16.特定字符集字符串适合选择()。 A.blob B.Text C.char D.binary二、说明题1.说明下列数据类型的不同应用场合。year/int,float/decimal,varchar/binary,time/char,date/charjson/varchar,point/char,bit/tinyint,int/unsignedint2.数值长度和精度有什么不同?3.枚举数据类型和集合数据类型与字符类型和整数类型相比有什么优势?4.什么时候适合二进制字符串?为什么它虽然存放字符串但不能指定字符集?三、编程题(基于xscj数据库)1.采用数据库默认属性创建学生成绩数据库(xscj)。2.修改学生成绩数据库(xscj)字符集为gbk。参考答案习题-第03章一、选择题 1.A 2.A 3.C 4.C 5.D 6.A 7.C 8.A 9.A 10.C 11.A 12.D 13.C 14.B 15.C 16.C二、说明题1.略。2.长度是最大可容纳的数字个数,而精度则是最大有效位数。3.枚举和集合类型只能从预定义的成员表中选取一个或多个确定的值,可有效避免用户错误、重复或不合法的输入;这两种类型都不是直接存储的字符串而是索引编号和二进制位,相比字符和整数类型更能节省空间、提高效率。4.存储图像、声音、视频等多媒体信息适合二进制字符串,由于它是以二进制字节形式存储的,不支持直接通过表查看器进行查看和更改,即不能可视化显示,故不能指定字符集。三、编程题1.创建学生成绩数据库(xscj),执行语句:CREATEDATABASEIFNOTEXISTSxscj;2.修改学生成绩数据库(xscj)字符集为gbk,执行语句:ALTERDATABASExscj DEFAULTCHARACTERSETgbk;第4章MySQL数据库和表结构设计一、多选题1、对于主键约束,错误说法是()。 A.主键约束是唯一性约束 B.主键约束是记录约束 C.主键约束不一定需要 D.主键约束是列约束 E.多列主键约束不能进行列约束 F.自增列一般用于主键列约束2.对于自增列,错误说法是()。 A.自增列是非空的 B.自增列是可以赋值的 C.自增列必须从1开始 D.自增列必须是顺序的3.对于char(10),错误说法是()。 A.占用的空间是固定10字节 B.占用的空间是不固定的 C.占用的空间对ascii码字符和utf8bm4字符集是固定的 D.占用的空间对纯中文字符是固定的4.对于varchar(10),错误说法是()。 A.最多可以存放10个字符。 B.占用空间与字符集和字符个数有关 C.10个ascii码字符占用10个字节 D.10个gbk码字符占用21个字节5.对于列属性,错误说法是()。 A.可以增加删除列 B.可以增加删除主键列约束 C.可以增删改CHECK约束 D.可以修改默认值 E.可以修改索引 F.可以同时修改列名和数据类型6.对于外键,错误说法是()。 A.子表插入记录,关联列在父表中必须存在。 B.子表删除记录不受关联父表影响 C.子表更新,关联父表列值同步更新 D.父表更新相关列,子表同步更新 E.父表插入记录不受子表影响 F.父表删除记录,同步删除子表相关联记录7.下列约束()不能同时用于列约束和表约束。 A.CHECK约束 B.外键约束 C.主键约束 D.唯一性约束 E.普通键约束 F.默认值约束 G.NOTNULL约束8.()可以设置默认值。 A.学号 B.出生时间 C.专业 D.性别 E.备注 F.密码 G.库存量 H.是否在线 I.发货状态 G.姓名9.计算列生成,说法错误的是()。 A.工资收入各项累计得到应收项 B.由含部门号的职工编号计算得到部门名 C.计算列可以创建索引 D.计算列不占用空间10.NULL不是()。 A.0 B.'' c.空格 D.什么没有11.关于复制表,说法错误的是()。A.Navicat软件可以复制与源表完全相同的表结构和表记录B.可以通过SQL语句复制与源表完全相同的表结构C.可以通过SQL语句复制与源表完全相同的表结构和表记录D.可以通过SQL语句复制源表符合条件的部分项记录12.关于索引的说法,错误的是()。 A.一个表可以创建多个唯一索引 B.一个表可以创建多个不唯一索引 C.创建索引并不改变表记录的物理排列顺序 D.可以按照表达式创建索引13.不能采用()创建索引。 A.CREATETABLE B.CREATEINDEX C.ALTERTABLE D.ALTERINDEX14.实现列值的唯一性不能通过()。 A.主键 B.UNIQUE C.identity属性 D.CHECK约束15.实现列值的非空不能通过()。 A.NOTNULL B.DEFAULT C.CHECK约束 D.数据类型16.关于完整性与索引的关系说法,错误的是()。A.没有索引不能实现完整性B.没有实现完整性的表必须人为来达到完整性C.已经实现完整性可以解除完整性D.索引就是为了实现完整性二、说明题1.为什么需要系统数据库,它的作用是什么?用户查询系统数据库方法与查询用户创建的数据库方法是否相同?2.为什么用自增列作为主键?3.PRIMARYKEY、UNIQUE[KEY]、NOTNULL、INDEX、DEFAULT、CHECK分别解决什么问题?4.列约束和表约束分别解决什么问题?是不是可以不需要列约束?三、编程题(基于xscj数据库)1.在学生成绩数据库(xscj)中创建学生表(xs),表结构如表x4.1所示。表x4.1学生表(表名xs)结构列名数据类型长度可空否默认值说明学号定长字符型(char)6×无主键姓名定长字符型(char)8×无专业名枚举型(enum)√无计算机,软件工程,通信工程性别整数型(bit)1×1男1,女0出生日期日期型(date)默认×无总学分整数型(tinyint)1√0地址(json)默认√无生成列:年龄列约束:PRIMARYKEY、NOTNULL、DEFAULT、CHECK表约束:INDEX(姓名)2.在学生成绩数据库(xscj)中创建课程表(kc),表结构如表x4.2所示。表x4.2课程表(表名kc)结构列名数据类型长度可空否默认值说明课程号定长字符型(char)3×无主键课程名定长字符型(char)16×无开课学期整数型(tinyint)1×1只能为1~8学分整数型(tinyint)1√无列约束:PRIMARYKEY、NOTNULL、DEFAULT、CHECK3.学生成绩数据库(xscj)中创建成绩表(cj),表结构如表x4.3所示。表x4.3成绩表(表名cj)结构列名数据类型长度可空否默认值说明学号定长字符型(char)6×无主键课程号定长字符型(char)3×无主键成绩整数型(tinyint)1√无表约束:PRIMARYKEY、FOREIGNKEY(学号,课程号)参考答案习题-第04章一、选择题 1.D 2.C 3.AC 4.C 5.F 6.C 7.BC 8.DFGHI 9.B 10.ABC 11.C 12.C 13.C 14.D 15.D 16.D二、说明题 1.系统数据库用来保存有关MySQL自身的管理信息,其中: (1)information_schema:保存了mysql服务器所有数据库的信息,比如数据库的名称、数据库的表、访问权限、数据库表的数据类型、数据库索引的信息等等。(2)mysql:MySQL的核心数据库,主要负责存储数据库的用户、权限设置、关键字等MySQL自己需要使用的控制和管理信息。(3)performance_schema:主要用于收集数据库服务器性能参数,可用于监控服务器在一个较低级别的运行过程中的资源消耗、资源等待等情况。(4)sys:数据来自performance_schema,把performance_schema的复杂度降低,让DBA能更好的阅读这个库里的内容,了解数据库的运行情况。查询系统数据库的方法与查询用户创建的数据库方法相同,但某些数据需要有管理员权限才能够查看和操作。 2.当PRIMARYKEY约束需要多列时,用自增列作为主键便于内部管理。 3.PRIMARYKEY设置主键约束,定义表的唯一主键;UNIQUE[KEY]定义唯一键约束,说明该列在表中唯一;NOTNULL设置列不允许为空;INDEX在列上创建索引,优化查询检索性能;DEFAULT设置列的默认值;CHECK定义列的完整性约束。 4.列约束是定义在列属性中的,而表约束是定义在所有列之后的。如果约束需要同时对多列进行那么就只能采用表约束,因为表约束面向的是表(当然就包括所有列),而列约束只能针对某一个单独的列进行约束。但列约束直接定义声明在列的定义之后,简便、直观、易读,也是必不可少的。三、编程题1.在学生成绩数据库(xscj)中创建学生表(xs),执行语句:USExscj;CREATETABLExs( 学号 char(6) NOTNULLPRIMARYKEY, 姓名 char(8) NOTNULL, 专业名 enum('计算机','软件工程','通信工程'), 性别 bit NOTNULLDEFAULT1, 出生日期 date NOTNULL, 年龄 tinyint UNSIGNEDAS(2022-year(出生日期))CHECK(年龄<30), 总学分 tinyint(1) DEFAULT0, 地址 json, INDEX(姓名));2.在学生成绩数据库(xscj)中创建课程表(kc),执行语句:USExscj;CREATETABLEkc( 课程号 char(3) NOTNULLPRIMARYKEY, 课程名 char(16) NOTNULL, 开课学期 tinyint(1) NOTNULLDEFAULT1CHECK(开课学期>=1AND开课学期<=8), 学分 tinyint(1));3.在学生成绩数据库(xscj)中创建成绩表(cj),执行语句:USExscj;CREATETABLEcj( 学号 char(6) NOTNULL, 课程号 char(3) NOTNULL, 成绩 tinyint(1), PRIMARYKEY(学号,课程号), FOREIGNKEY(学号)REFERENCESxs(学号), FOREIGNKEY(课程号)REFERENCESkc(课程号));第5章MySQL表记录操作一、选择题1.对于插入表记录的语句,错误说法是()。 A.INSERT B.LOADDATA导入文本文件 C.Navicat导入Excel文件 D.REPLACE E.INSERT…SELECT F.LOAD_FILE导入图片列2.对于更新表记录,错误说法是()。 A.UPDATE B.REPLACE C.JSON_*有关函数更新json列 D.ALTERTABLEtestMODITY3.对于删除test表记录,错误说法是()。 A.DELETEFROMtest B.TRUNCATETABLEtest C.DROPTABLEtest D.ALTERTABLEtestDROP4.对于INSERT语句,错误说法是()。 A.不指定列必须顺序插入所有列 B.数值字符可插入数字类型列 C.DEFAULT代表默认值 D.占位插入默认值 E.日期时间列可插入日期 F.不能插入NULL5.对于mysqldump命令,错误说法是()。 A.一次备份一个或者多个数据库 B.一次备份一个或者多个表 C.可以仅仅备份表结构 D.可以仅仅备份表部分记录 E.备份的内容只能自己恢复 F.保存到文件中的是SQL语句二、编程题(基于xscj数据库)1.表记录插入在学生成绩数据库(xscj)学生表(xs)、课程表(kc)和成绩表(cj)插入记录。记录样本如表x5.4~x5.6所示。表x5.4学生表(表名xs)数据样本学号姓名专业名性别出生日期总学分081101王林计算机11994-02-1050081102程明计算机11995-02-0150081103王燕计算机01993-10-0650081104韦严平计算机11994-08-2650081106李方方计算机11994-11-2050081107李明计算机11994-05-0154081108林一帆计算机11993-08-0552081109张强民计算机11993-08-1150081110张蔚计算机01995-07-2250081111赵琳计算机01994-03-1850081113严红计算机01993-08-1148081201王敏通信工程11993-06-1042081202王林通信工程11993-01-2940081204马琳琳通信工程01993-02-1042081206李计通信工程11993-09-2042081210李红庆通信工程11993-05-0144081216孙祥欣通信工程11993-03-0942081218孙研通信工程11994-10-0942081220吴薇华通信工程01994-03-1842081221刘燕敏通信工程01993-11-1242081241罗林琳通信工程01994-01-3050表x5.5课程表(表名kc)数据样本课程号课程名开课学期学分101计算机基础15102程序设计与语言24206离散数学44208数据结构54209操作系统64210计算机原理55212数据库原理74301计算机网络73302软件工程73表x5.6成绩表(表名cj)数据样本学号课程号成绩学号课程号成绩学号课程号成绩081101101800811071017808111120676081101102780811071028008111310163081101206760811072066808111310279081103101620811081018508111320660081103102700811081026408120110180081103206810811082068708120210165081104101900811091016608120310187081104102840811091028308120410191081104206650811092067008121010176081102102780811101019508121610181081102206780811101029008121810170081106101650811102068908122010182081106102710811111019108122110176081106206800811111027008124110190(1)用INSERT语句插入kc表记录,一次插入一条记录语句。(2)用INSERT语句插入kc表记录,一次插入多条记录语句。(3)把xs表样本记录变成Excel,通过Excel导入xs表中过程。(4)把cj表样本记录变成文本文件,通过SQL导入cj表中语句。2.mysqldump备份与恢复(1)采用mysqldump备份xscj数据库,分别备份xscj数据库xs表、kc表和cj表结构和表记录。(2)删除xscj数据库,恢复xscj数据库,打开xscj数据库,观察3个表结构和表记录。3.SQL语句记录复制和导入(1)采用SQL语句复制xscj数据库xs表、kc表和cj表结构为xs1、kc1和cj1,分别复制xscj数据库xs表、kc表和cj表记录为xs2、kc2和cj2。(2)在xs1表中导入xs2表记录。参考答案习题-第05章一、选择题 1.D 2.D 3.D 4.F 5.D二、编程题 1.表记录插入 (1)用INSERT语句插入kc表记录,一次插入一条记录语句:USExscj;INSERTINTOkc(课程号,课程名,开课学期,学分)VALUES(101,'计算机基础',1,5);INSERTINTOkcVALUES(102,'程序设计与语言',2,4); (2)用INSERT语句插入kc表记录,一次插入多条记录语句:USExscj;INSERTINTOkc(课程号,课程名,开课学期,学分) VALUES (206,'离散数学',4,4), (208,'数据结构',5,4), (209,'操作系统',6,4);INSERTINTOkc VALUES (210,'计算机原理',5,5), (212,'数据库原理',7,4), (301,'计算机网络',7,3), (302,'软件工程',7,3); (3)把xs表样本记录变成Excel,通过Excel导入xs表中过程。①将xs表记录保存为Excel文件xs.xlsx。②右击xscj数据库的xs表,选择“导入向导...”,导入类型选“Excel文件(*.xls;*.xlsx)”,点“下一步”按钮。③“导入从:”浏览选中存盘的xs.xlsx文件,“表”勾选“Sheet1”,点“下一步”按钮。④将“日期分隔符”设为“-”,点“下一步”按钮。⑤选择目标表为xs,点“下一步”按钮。⑥确认“源字段”与“目标字段”对应无误后,点“下一步”按钮。⑦选中导入模式为“追加”,点“下一步”按钮。⑧点“开始”按钮开启导入过程。 (4)把cj表样本记录变成文本文件,通过SQL导入cj表中语句:SETGLOBALlocal_infile=ON;USExscj;LOADDATALOCALINFILE'C:\\MySQL\\cj.txt'INTOTABLEcj LINES TERMINATEDBY'\r\n'; 2.mysqldump备份与恢复 (1) ①备份xscj数据库,Windows命令行执行:mysqldump-uroot-p123456xscj>C:\MySQL\xscj.sql ②分别备份xs、kc和cj表,Windows命令行执行:mysqldump-hlocalhost-uroot-p123456xscjxs>C:\MySQL\xs.sqlmysqldump-hlocalhost-uroot-p123456xscjkc>C:\MySQL\kc.sqlmysqldump-hlocalhost-uroot-p123456xscjcj>C:\MySQL\cj.sql (2) ①删除xscj数据库,Navicat执行:DROPDATABASExscj; ②重建xscj数据库,Navicat执行:CREATEDATABASExscj DEFAULTCHARACTERSETgbk; ③恢复xscj数据库,Windows命令行执行:mysql-uroot-p123456xscj<C:\MySQL\xscj.sql 3.SQL语句记录复制和导入 (1)执行SQL语句:USExscj;CREATETABLExs1LIKExs;CREATETABLEkc1LIKEkc;CREATETABLEcj1LIKEcj;CREATETABLExs2AS(SELECT*FROMxs);CREATETABLEkc2AS(SELECT*FROMkc);CREATETABLEcj2AS(SELECT*FROMcj); (2)执行SQL语句:INSERTINTOxs1(学号,姓名,专业名,性别,出生日期,总学分) SELECT学号,姓名,专业名,性别,出生日期,总学分FROMxs2;第6章分区、表空间和行格式一、多选题1.分区缺点是()。 A.存储更多数据 B.优化查询 C.分区表更容易维护 D.一个表最多只能有1024个分区 E.分区列要么不包含主键或者索引列,要么包含全部主键和索引列 F.分区表中无法使用外键约束2.关于范围分区,错误说法是()。 A.范围分区存放表一个区域记录 B.一个分区对应一个文件 C.范围分区分区列和表达式只能整数 D.范围列分区列可以是字符类型和日期类型 E.添加分区应该在原来分区包含的范围之外 F.删除分区将删除该分区记录3.关于列表分区,错误说法是()。 A.列表分区存放记录列内容必须在分区值集合中 B.列表列分区存放记录列内容可以是非整型,并且必须在分区值集合中 C.列表列分区可以包含多列 D.只能移除所有列表分区而不能仅仅移除一个或者部分分区 E.移除分区后,所有记录在同一个分区 F.重组分区可以将多个分区合为一个4.关于散列分区,错误说法是()。 A.如果分区列或者表达式选择不好,无法保证均匀分布。 B.线性散列分区中记录均匀分布的可能性变大。 C.如果对自增列散列分区,可以做到均匀分布记录。 D.分区拆分和合并所有记录会重新分区。5.关于表空间,错误说法是()。 A.一个表可以存放在多个文件中 B.一个通用表空间中可以存放多个表 C.单表表空间只能存放一个表 D.系统默认的表空间为通用表空间6.关于行格式,错误说法是()。 A.行格式指的是表列内容组织方式 B.行格式指的是表记录的组织方式 C.一个记录定长由行格式决定 D.压缩行格式不能适用所有表空间二、说明题表分区与分表的区别。表分区和表空间的关系。范围分区和范围列分区区别是什么?列表分区和列表列分区区别是什么?重做日志表空间的作用是什么?行格式对表的操作效率有什么影响? 三、编程题(基于xscj数据库)1.在学生成绩数据库(xscj)学生表按照专业进行列表分区。2.分别采用指定分区和不指定分区查询计算机专业所有学生信息。参考答案习题-第06章一、选择题 1.DEF 2.E 3.F 4.B 5.D 6.A二、说明题 1.分区用于描述表记录的分类区域,它可按照一定逻辑跨文件系统分配数据库的单个表的多个部分,分区后表中所有分区的记录仍属于同一个表;而分表则是将一张表分成很多小表,每一个小表都是完整的一张表,都对应三个文件:一个.MYD数据文件,一个.MYI索引文件和一个.frm表结构文件,数据实际存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表上。 2.表空间描述表存储,表分区描述表记录存储。 3.范围分区和范围列分区区别: (1)范围分区BYRANGE接受的是表达式值;范围列分区BYRANGECOLUMNS接受的是列名表。 (2)范围分区表达式和列只能为整数类型;范围列分区列的数据类型可以是整数、字符串(text和blob除外)、日期(日期时间)。 4.列表分区(BYLIST)必须是整数类型列名或者基于一个列的整数表达式;列表列分区(BYLISTCOLUMNS)允许用非整数类型的列,并可用多列进行分区,但不允许用含列名的表达式。 5.重做日志表空间存放InnoDB引擎的事务日志,用于在数据库崩溃后进行数据恢复,保证数据完整性。 6.Redundant行格式存储有冗余,操作效率高;Compact将连续记录链接在一起,DYNAMIC将变体内容存储在外面,COMPRESSED与DYNAMIC相比,增加了压缩功能。三、编程题 1.学生表按照专业进行列表分区。为使学生表能支持列表分区,需要将原“专业名”列由枚举类型(enum)改成字符串型(varchar),同时将该列添加为主键之一。建议另创建一个xs0表,导入原xs表的数据,执行语句:USExscj;CREATETABLExs0( 学号 char(6) NOTNULL, 姓名 char(8) NOTNULL, 专业名 varchar(10) NOTNULL, 性别 bit NOTNULLDEFAULT1, 出生日期 date NOTNULL, 年龄 tinyint UNSIGNEDAS(2022-year(出生日期))CHECK(年龄<30), 总学分 tinyint(1) DEFAULT0, 地址 json, PRIMARYKEY(学号,专业名), INDEX(姓名));INSERTINTOxs0(学号,姓名,专业名,性别,出生日期,总学分) SELECT学号,姓名,专业名,性别,出生日期,总学分FROMxs;对xs0表按照专业进行列表分区,执行语句:USExscj;ALTERTABLExs0 PARTITIONBYLISTCOLUMNS(专业名) ( PARTITIONp0VALUESIN('计算机'), PARTITIONp1VALUESIN('通信工程') ); 2.查询计算机专业所有学生信息 (1)指定分区查询,执行语句:SELECT*FROMxs0PARTITION(p0); (2)不指定分区查询,执行语句:SELECT*FROMxs0WHERE专业名='计算机';以上两条SQL语句运行输出的结果完全一样。第7章MySQL8运算符、表达式和系统函数一、多选择题1.下列数值为十进制13是()。 A.0b1101 B.1.3E10 C.x'0D' D.13 2.下列为字符串S1是() A."S1" B.'s1' C.x'5331' D.b'010100110011001'3.今天是2021年“五一”国际劳动节,下面日期()是相同的。 A.'2021-05-01' B.'2021-05-0112:30:43' C.NOW() D.CURDATE() E.DATE()4.下列()不是常量。A.'astudent' B.0xABC C.1998-04-15 D.2.05.在表达式值正确是()。 A.0x1A+'10'=36 B.1/(7MOD2-1)=NULL C.(7%-3)+0.5*(-0.1)=0.95 D.21-'3A'-b'11'=156.关于用户变量说法错误的是()。A.用户变量用于临时存放数据 B.只有SET语句赋值C.是会话变量 D.在SQL语句中可以使用7.关于系统变量说法错误的是()。 A.Navicat中不同的查询窗口全局系统变量是共同的 B.Navicat中不同的查询窗口会话系统变量是不同的 C.初始会话系统变量与全局系统变量的值是相同的 D.全局系统变量MySQL运行期间可以修改,但无法保存到配置文件中二、说明题1.局部变量、用户变量和系统变量的作用域有什么不同?2.使用用户变量有什么好处?为什么用户变量是本地的而不是全局的?3.定义用户变量mydate,并使用一条SET语句和一条SELECT语句把当前的日期赋值给它。4.定义用户变量mudate并且赋值,然后在SQL语句中使用它。在SQL语句中如何区分列名和用户变量?5.MySQL函数一共有几种?举例说明不同类型的系统函数在操作数据库表中的应用。6.系统变量作用。系统变量值如何查询、读取、修改和保存。参考答案习题-第07章一、选择题 1.BD 2.AC 3.ABCD 4.C 5.ABCD 6.BC 7.D二、说明题 1.局部变量只能在存储过程和用户自定义函数等过程体的复合语句(BEGIN…END)中使用;用户变量在当前会话中使用;系统变量在MySQL服务器启动时就被引入并初始化为默认值,既可在当前会话中使用,也可在所有会话中使用。 2. (1)使用用户变量的好处用户可以先在用户变量中保存值,然后在以后引用它,这样可以将值从一个语句传递到另一个语句。(2)因为用户变量与连接有关。也就是说,一个客户端定义的变量不能被其他客户端看到或使用。当客户端退出时,该客户端连接的所有用户变量将自动释放,所以说用户变量是本地的而非全局的。 3.执行语句如下:SET@mydate=CURDATE();SELECT@mydate; 4.执行语句如下:SET@mudate='2022-02-2222:22:22';SELECT@mudate; 在SQL语句中,在用户变量的前面加@符号将它和列名区分开。 5.MySQL函数可以分成数学函数、字符串函数、日期时间函数、类型转换函数、JSON处理函数、空间数据函数、窗口函数和其他函数。举例略,请参考有关文档。 6.系统变量用于表达系统的各种状态,大多数系统变量在名称前加两个@符号查询其值,某些特定的系统变量(如CURRENT_DATE、CURRENT_TIME等)可省略@@符号;系统变量可以通过SET语句来修改,在运行时通过SETGLOBAL命令来更改;系统变量的初始值由MySQL服务器启动时从配置文件中读取。MySQL8新增了SETPERSIST命令可将系统变量值保存到数据目录下的配置文件(f)中。第8章查询、视图和索引一、选择题1.SELECT查询条件不可以控制()。A.输出记录个数B.输出列 C.无条件 D.输出表达式值E.输出项标题 2.SELECT不能实现()。A.排除部分列 B.输出符合条件的部分行C.对查询结果进行分类 D.不出现重复行3.SELECT不能实现()。A.获得多个关联表中符合条件的记录 B.统计汇总表中符合条件的记录C.输出列包含表达式 D.将符合条件的记录构建新表4.SELECT查询结果顺序不可以()。A.主键值从大到小顺序 B.多列控制顺序 C.物理记录顺序 D.随机顺序5.SELECT查询条件不可以控制()。A.输出记录个数B.输出列 C.无条件 D.输出表达式值6.SELECT查询数据源不能是()。A.基本表 B.视图 C.查询 D.自定义函数7.SELECT子查询不能使用在()子句。A.FROM B.WHERE C.HAVING D.ORDERBYE.输出项8.下列说法错误的是()。A.界面创建的视图不能通过命令修改 B.能够完全像操作表一样操作视图C.视图中是定义而无数据 D.删除视图不会影响原表数据9.视图不能实现()的功能。A.控制操作表的列和记录 B.把常用多表查询变成对视图的简单操作C.可以更新原表内容 D.可以修改原表结构10.下列()查询不能使用索引。A.分区表中对主键列 B.唯一性索引查询键前部C.普通索引键 D.非固定字符列索引二、说明题索引的好处以及可能带来的弊端。索引有哪几类?前缀索引和全文索引特点。主键、外键和索引的区别。PRIMARYKEY和UNIQUE索引有什么不同?4.有几种方法创建索引,它们有什么不同?三、编程题(基于xscj数据库)1.查询成绩(cj)表中指定课程号(@mykch)的学号、成绩和等级。等级分为“不及格”、“及格”、“中等”、“良好”和“优秀”。2.查询成绩(cj)表指定年级(@mynj)的学号、成绩和满分150分成绩。3.统计学生表(xs)总学分在50分以上的人数。4.查询成绩(cj)表指定课程号(@mykch)的学生的最高分、最低分和平均分。5.查询所有学生选过的课程名和课程号。6.查询选修了指定课程号(@mykch)且成绩在80分以上的学生姓名及成绩。7.查询选修了指定课程名(@mykcm)课程且成绩在80分以上的学生学号、姓名、课程名及成绩。8.查询所有学生选过的课程名。9.查询所有姓“王”的学号倒数或者学号第二个数字为0的学生的学号、姓名及专业名。10.查询学号里包含4、5、6或者学号以08结尾的学生学号、姓名和专业名。11.查询在1993年1月~6月出生的学生情况。12.查询“计算机”或“通信工程”的学生的情况。13.查询未选修指定课程名(@mykcm)的学生的姓名、学号、专业名。14.查询比所有计算机专业的学生年龄都大的学生学号、姓名、专业名、出生日期。15.查询所有女学生的姓名、学号以及与指定学号(@myxh)学生的年龄差距。16.统计各专业的学生数。17.统计选修的各门课程的平均成绩和选修该课程的人数。18.产生一个结果集,包括每个专业的男生人数、女生人数、总人数,以及学生总人数。19.产生一个结果集,包括每门课程各专业的平均成绩、每门课程的总平均成绩和所有课程的总平均成绩。20.计算平均成绩在85分以上的学生的学号和平均成绩。21.查询选修课程超过2门且成绩都在80分以上的学生的学号。22.查询通信工程专业平均成绩在85分以上的学生的学号和平均成绩。23.将计算机专业学生的“计算机基础”课程成绩按降序排列。24.将计算机专业学生按其平均成绩排列。25.先用WITH查询2个学生的所有考试成绩,然后把它们联合起来。26.向准备计算指定学生的平均成绩,然后计算2个学生的平均成绩。27.28.创建参考答案习题-第08章一、选择题 1.C 2.A 3.B 4.D 5.C 6.D 7.D 8.A 9.D 10.B二、说明题 1.好处:MySQL利用索引加速了WHERE子句中与条件相匹配的行的搜索,或者说在执行连接时加快了与其他表中的行匹配的行的搜索。弊端:首先,索引是以文件的形式存储的,索引文件要占用磁盘空间。如果有大量的索引,索引文件可能会比数据文件更快地达到最大的文件尺寸。其次,在更新表中索引列上的数据时,对索引也需要更新,这可能需要重新组织一个索引,如果表中的索引很多,这是很浪费时间的。也就是说,这样就降低了添加、删除、修改和其他写入操作的效率。表中的索引越多,则更新表的时间就越长。 2.索引有普通索引(INDEX)、唯一性索引(UNIQUE)、主键(PRIMARYKEY)、前缀索引、全文索引(FULLTEXT)、哈希索引(HASH)等。 前缀索引:对文本的前几个字符(具体是几个在建立索引时指定)建立索引,这样建立起来的索引文件更小、检索速度更快。但是不能在ORDERBY或GROUPBY中使用前缀索引。 全文索引:在定义这种索引的列上支持值的全文检索,允许在这些索引列中插入重复值和空值。全文索引只能在char、varchar或text类型的列上创建,并且只能在MyISAM表中创建。 3.三者的区别: (1)主键唯一标识一条记录,不能有重复的,不允许为空;外键是另一表的主键,可以有重复的,也可以是空值;索引字段没有重复值,但可以有一个空值。 (2)主键用来保证数据完整性;外键用来和其他表建立关联;索引则是为了提高查询排序的速度。 (3)主键只能有一个;外键可以有多个;一个表可以有多个惟一索引。 PRIMARYKEY是主键索引,UNIQUE是唯一性索引,主键其实是唯一性索引的一种,与之区别在于:每个表只能有一个主键,但可以有多个唯一性索引。 4.有以下3种创建方法 (1)CREATEINDEX语句:可以在一个已有表上创建索引,一个表可以创建多个索引。 (2)ALTERTABLE语句:在修改表的时候向其中添加索引。 (3)CREATETABLE语句:在创建表的语句中包含索引的定义。三、编程题 1.查询成绩(cj)表中指定课程号(@mykch)的学号、成绩和等级。USExscj;SET@mykch='101';SELECT学号,成绩, (CASEWHEN成绩>=90THEN'优秀' ELSE(CASEWHEN成绩>=80THEN'良好' ELSE(CASEWHEN成绩>=70THEN'中等' ELSE(CASEWHEN成绩>=60THEN'及格' ELSE'不及格' END) END) END) END)AS等级 FROMcj WHERE课程号=@mykch; 2.查询成绩(cj)表指定年级(@mynj)的学号、成绩和满分150分成绩。 3.统计学生表(xs)总学分在50分以上的人数。SELECTCOUNT(学号)AS'总学分50以上的人数' FROMxs WHERE总学分>50; 4.查询成绩(cj)表指定课程号(@mykch)的学生的最高分、最低分和平均分。SET@mykch='101';SELECTMAX(成绩)AS'最高分',MIN(成绩)AS'最低分',AVG(成绩)AS'平均分' FROMcj WHERE课程号=@mykch; 5.查询所有学生选过的课程名和课程号。SELECT课程号,课程名 FROMkc WHERE课程号IN ( SELECTDISTINCT(课程号) FROMcj ); 6.查询选修了指定课程号(@mykch)且成绩在80分以上的学生姓名及成绩。SET@mykch='206';SELECT姓名,成绩 FROMxs,cj WHERExs.学号=cj.学号 AND课程号=@mykch AND成绩>80; 7.查询选修了指定课程名(@mykcm)课程且成绩在80分以上的学生学号、姓名、课程名及成绩。SET@mykcm='离散数学';SELECTxs.学号,姓名,课程名,成绩 FROMxs,kc,cj WHERExs.学号=cj.学号 ANDkc.课程号=cj.课程号 AND课程名=@mykcm AND成绩>80; 8.查询所有学生选过的课程名。SELECT课程名 FROMkc WHERE课程号IN ( SELECTDISTINCT(课程号) FROMcj ); 9.查询所有姓“王”的学号倒数或者学号第二个数字为0的学生的学号、姓名及专业名。SELECT学号,姓名,专业名 FROMxs WHERE姓名LIKE'王%' AND( SUBSTRING(学号,1,1)='0' ORSUBSTRING(学号,-2,1)='0' ); 10.查询学号里包含4、5、6或者学号以08结尾的学生学号、姓名和专业名。SELECT学号,姓名,专业名 FROMxs WHERELOCATE('4',学号)>0 ORLOCATE('5',学号)>0 ORLOCATE('6',学号)>0 OR学号LIKE'%08'; 11.查询在1993年1月~6月出生的学生情况。SELECT*FROMxs WHERE出生日期BETWEEN'1993-01-01'AND'1993-06-30'; 12.查询“计算机”或“通信工程”的学生的情况。 13.查询未选修指定课程名(@mykcm)的学生的姓名、学号、专业名。SET@mykcm='计算机基础';SELECT姓名,学号,专业名 FROMxs WHERE学号NOTIN ( SELECTxs.学号 FROMxs,kc,cj WHERExs.学号=cj.学号 ANDkc.课程号=cj.课程号 AND课程名=@mykcm ); 14.查询比所有计算机专业的学生年龄都大的学生学号、姓名、专业名、出生日期。SELECT学号,姓名,专业名,出生日期 FROMxs WHERE出生日期< ( SELECTMIN(出生日期) FROMxs WHERE专业名='计算机' ); 15.查询所有女学生的姓名、学号以及与指定学号(@myxh)学生的年龄差距。SET@myxh='081202';SELECT姓名,学号, FLOOR( DATEDIFF ( 出生日期,(SELECT出生日期FROMxsWHERE学号=@myxh) )/365)AS年龄差距 FROMxs WHERE性别=0; 16.统计各专业的学生数。SELECT专业名,COUNT(*)AS学生数 FROMxs GROUPBY专业名; 17.统计选修的各门课程的平均成绩和选修该课程的人数。SELECT课程号,AVG(成绩)AS平均成绩,COUNT(学号)AS选修人数 FROMcj GROUPBY课程号; 18.产生一个结果集,包括每个专业的男生人数、女生人数、总人数,以及学生总人数。SELECT专业名,性别,COUNT(*)AS人数 FROMxs GROUPBY专业名,性别 WITHROLLUP; 19.产生一个结果集,包括每门课程各专业的平均成绩、每门课程的总平均成绩和所有课程的总平均成绩。SELECT课程名,专业名,AVG(成绩)AS平均成绩 FROMcj,kc,xs WHEREcj.课程号=kc.课程号ANDcj.学号=xs.学号 GROUPBY课程名,专业名 WITHROLLUP; 20.计算平均成绩在85分以上的学生的学号和平均成绩。SELECT学号,AVG(成绩)AS平均成绩 FROMcj GROUPBY学号 HAVINGAVG(成绩)>=85; 21.查询选修课程超过2门且成绩都在80分以上的学生的学号。SELECT学号 FROMcj WHERE成绩>=80 GROUPBY学号 HAVINGCOUNT(*)>2; 22.查询通信工程专业平均成绩在85分以上的学生的学号和平均成绩。SELECT学号,AVG(成绩)AS平均成绩 FROMcj WHERE学号IN ( SELECT学号 FROMxs WHERE专业名='通信工程' ) GROUPBY学号 HAVINGAVG(成绩)>=85; 23.将计算机专业学生的“计算机基础”课程成绩按降序排列。SELECT姓名,课程名,成绩 FROMxs,kc,cj WHERExs.学号=cj.学号 ANDcj.课程号=kc.课程号 AND课程名='计算机基础' AND专业名='计算机' ORDERBY成绩DESC; 24.将计算机专业学生按其平均成绩排列。SELECT学号,姓名,专业名 FROMxs WHERE专业名='计算机' ORDERBY( SELECTAVG(成绩) FROMcj GROUPBYcj.学号 HAVINGxs.学号=cj.学号 ); 25.先用WITH查询2个学生的所有考试成绩,然后把它们联合起来。WITHcte_stu1_cjAS( SELECT姓名,课程名,成绩 FROMxs,kc,cj WHERExs.学号=cj.学号 ANDkc.课程号=cj.课程号 ANDxs.学号='081113'),cte_stu2_cjAS( SELECT姓名,课程名,成绩 FROMxs,kc,cj WHERExs.学号=cj.学号 ANDkc.课程号=cj.课程号 ANDxs.学号='081202')SELECT*FROMcte_stu1_cj UNIONSELECT*FROMcte_stu2_cj; 26.向准备计算指定学生的平均成绩,然后计算2个学生的平均成绩。 27.创建计算机专业学生的平均成绩视图view_avg,包括学号和平均成绩:CREATEVIEWview_avg AS SELECTxs.学号,AVG(成绩)AS平均成绩 FROMcj,xs WHERE专业名='计算机' ANDxs.学号=cj.学号 GROUPBYcj.学号; 基于view_avg查询平均成绩大于80的学生情况:SELECTxs.学号,姓名,专业名,性别,出生日期,年龄,总学分,平均成绩 FROMxs,view_avg WHERExs.学号=view_avg.学号 AND平均成绩>80; 28.创建计算机专业学生视图view_jsjCREATEVIEWview_jsj AS SELECT*FROMxs WHERE专业名='计算机'; 基于该视图插入一个学生信息,然后查询视图和xs表,INSERTINTOview_jsj(学号,姓名,专业名,性别,出生日期,总学分) VALUES('081114','周何骏','计算机',1,'1995-09-25',50);SELECT*FROMxsWHERE学号='081114'; 29.采用索引方法按照姓名查找指定学生记录,评估查询性能。SELECT*FROMxsWHERE姓名='周何骏';SHOWSTATUSWHERE姓名='周何骏';第9章过程式对象程序设计一、选择题1.下列说法错误的是()。A.语句体包含一个以上语句需要采用BEGIN…ENDB.多重分支只能用CASE语句C.WHILE中循环体可以一次不执行D.注释内容不会产生任何动作2.关于存储过程的说法,说法错误的是()。A.方便用户完成某些功能B.存储过程方便用户批量执行-SQL命令C.存储过程不能调用存储过程D.应用程序可以调用存储过程3.存储过程与外界的交互不能通过()。A.表 B.输入参数 C.输出参数 D.游标4.关于存储函数,说法错误的是()。A.函数值只能一个 B.不能采用事务C.不能包含输出参数 D.不能使用用户变量5.关于游标,说法错误的是()。A.游标用于处理多条记录 B.一次只能读取一条记录C.只能顺序读取 D.游标定义不能保存6.关于事务,说法错误的是()。A.事务一般用于一条以上增删改语句中 B.回滚后事务中记录的变化均不会发生C.必须关闭自动提交 D.同一个事务中不同查询的相同项可能检索到不同的结果7.关于触发器的错误说法是()。A.INSERT触发器先插入记录后判断 B.DELETE触发器先删除记录后判断C.UPDATE触发器先判断后修改记录 D.A和B8.关于触发器的错误说法是()。A.游标一般用于存储过程 B.游标也可用于触发器C.应用程序可以调用触发器 D.触发器一般针对表二、说明题1.为什么需要使用存储过程和存储函数?2.存储函数和存储过程有什么不同,它们分别应用在什么场合?3.为什么需要错误处理?什么情况下需要抛出错误信息?4.如何指定存储函数和存储过程调用者?5.加锁后是否不需要事务?6.事务处理和错误处理功能有什么不同?7.什么是幻读?什么是MVCC?8.为什么需要使用触发器?。9.为什么需要使用事件?定义的事件是否一定保存?三、编程题(基于xscj数据库)1.创建存储过程proc_area,计算三角形面积。输入参数为三边长(a,b,c),输出参数为三角形面积。调用存储过程,显示计算结果。2.创建存储函数func_area,计算三角形面积。输入参数为三边长(a,b,c),函数返回为三角形面积。调用存储函数,显示计算结果。边长小于等于0,返回NULL。3.编写插入成绩表(cj)记录存储过程CJ_INSERT,输入参数为学号、课程号、成绩,输出参数为状态。如果对应学号和课程号存在,返回状态0,否则进行插入操作。包括:(1)查找课程表(kc)对应该课程的学分,如果找不到该课程,课程号输入参数错误,状态为-11。(2)查找学生表(xs)对应学号,如果找不到该学号,学号输入参数错误,状态为-12。(3)如果输入参数正确,用输入参数对成绩表(cj)插入记录,同时更新(累加)学号对应记录总学分,返回状态1。插入操作需要采用事务,如果事务操作不成功,状态为-1。4.编写修改成绩表(cj)记录存储过程CJ_UPDATE,输入参数为学号、课程号、成绩,输出参数为状态。如果对应学号和课程号不存在,调用插入成绩表(cj)记录存储过程CJ_INSERT,将CJ_INSERT存储过程返回状态作为本存储过程状态返回。否则进行修改操作。包括:(1)读取课程表(kc)对应课程的学分。(2)如果原来成绩和新成绩均>=60或者均<60,修改成绩表对应成绩。返回状态1。(3)如果原来成绩>=60而新成绩<60,修改成绩表对应成绩,同时学生表(xs)总学分减该课程学分。返回状态1。(4)如果原来成绩<60而新成绩>=60,修改成绩表对应成绩,同时学生表(xs)总学分加该课程学分。返回状态1。修改操作需要采用事务,如果事务操作不成功,状态为-1。5.创建通过游标实现学生表(xs)总学分初始化存储过程XS_ZXF_RESET。输入参数为学号,输出参数为状态。成绩表(cj)对应学号查询定义作为游标,学生表(xs)对应学号学生记录加锁,总学分置0,循环读取游标记录,根据成绩,读取对应课程学分,累加学生表(xs)学号记录总学分。循环完成后,学生表(xs)对应学号学生记录解锁。6.创建学生表(xs)删除触发器,判断成绩表(cj)是否存在对应的学号记录,如果存在,发出错误信号,阻止学生表(xs)删除操作。参考答案习题-第09章一、选择题 1.B 2.C 3.D 4.D 5.D 6.D 7.D 8.C二、说明题 1.存储过程和存储函数在服务器端运行、执行速度快,其执行一次后,执行规划就驻留在高速缓冲存储器,以后操作只需从高速缓存中调用已编译好的二进制代码,提高了系统性能。另外,使用存储过程和存储函数可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限,确保数据库安全。 2.存储函数与存储过程的区别:(1)存储函数不能拥有输出参数,因为存储函数本身就是输出参数;(2)不能用CALL语句来调用存储函数;(3)存储函数必须包含一条RETURN语句,而这条特殊的SQL语句不允许包含于存储过程中。存储函数多用于辅助数据库操作(如克服生成列的局限性),但MySQL的存储函数并不支持使用显示或隐式事务,所以涉及基本表的更新操作一般不要采用存储函数实现,而是用存储过程结合事务的方法来保证更新数据的一致和完备性。 3.MySQL程序中处理SQL语句可能会出错,导致系统停止对程序的处理,使用错误处理功能可以为不同的错误定义不同的处理程序,让系统根据条件自动处理。在实际应用中有时需要根据情况主动向MySQL系统提供信号,以便服务器向处理程序、客户端提供当前数据库操作情况信息,这个时候就需要抛出错误信息。 4.存储过程创建好后,可以在应用程序、触发器或者其他存储过程中通过“CALL存储过程名(参数,...)”调用;而存储函数创建好后,就如同系统提供的内置函数一样可供随时

温馨提示

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

最新文档

评论

0/150

提交评论