版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页国家开放大学《MySQL数据库应用》(03598)形成性考核作业及答案使用说明适用课程:国家开放大学开放教育计算机应用技术、软件技术、大数据技术等专业《MySQL数据库应用》(课程代码03598),2026年秋季学期。结构说明:本课程形成性考核共设4个形考任务,每个任务满分100分,其中单项选择题20题(每题2分,共40分)、多项选择题5题(每题4分,共20分)、判断题10题(每题2分,共20分)、简答题2题(每题10分,共20分)。编号说明:题号在每个形考任务内按阿拉伯数字1~37连续编排(1~20为单选,21~25为多选,26~35为判断,36~37为简答)。答案说明:答案与解析依据课程主教材(MySQL数据库应用)知识体系及现行题库口径整理,语法以MySQL8.0为准(5.7差异处已在解析中注明)。多选题少选、错选均不得分;个别题目在不同版本题库中选项顺序、表述略有差异,若学习平台判定不同,请以平台返回的标准答案为准。使用建议:本课程考点高度集中于"语法格式—执行结果—适用场景"三要素,建议在MySQL命令行或图形工具中逐条敲一遍示例语句;选择题中"下列语句执行结果是"一类题目,务必注意表名、列名与数据。答题提示:简答题中的SQL题按"写出语句—说明思路—指出关键点"作答;比较类题目(CHAR与VARCHAR、WHERE与HAVING、UNION与UNIONALL、存储过程与函数)建议列表对照。形考任务一MySQL概述、数据类型与表结构管理(一)单项选择题(每题2分,共20题,40分)1.MySQL数据库服务器默认使用的TCP端口号是___。A.1521B.3306C.5432D.8080【答案】B【解析】MySQL默认端口3306(Oracle为1521,PostgreSQL为5432),可在配置文件my.ini/f中通过port参数修改。2.MySQL5.5版本之后,创建表时默认使用的存储引擎是___。A.MyISAMB.InnoDBC.MEMORYD.ARCHIVE【答案】B3.下列存储引擎中,支持事务、行级锁和外键的是___。A.MyISAMB.InnoDBC.MEMORYD.CSV【答案】B【解析】MyISAM只支持表级锁、不支持事务与外键;InnoDB支持事务、行级锁、外键与崩溃恢复,是OLTP场景的首选。4.要查看当前MySQL服务器中所有的数据库,应使用的命令是___。A.SHOWTABLES;B.SHOWDATABASES;C.SELECTDATABASES;D.LISTDATABASES;【答案】B5.创建名为school的数据库,正确的语句是___。A.CREATEDATABASEschool;B.CREATETABLEschool;C.NEWDATABASEschool;D.MAKEDATABASEschool;【答案】A6.要切换到已存在的数据库school进行操作,应使用___。A.OPENschool;B.USEschool;C.SETschool;D.SELECTschool;【答案】B7.查看表student的字段名、类型、是否为空等结构信息,应使用___。A.SHOWCREATETABLEstudent;B.DESCstudent;C.SELECT*FROMstudent;D.SHOWTABLES;【答案】B【解析】DESC(DESCRIBE的简写)显示字段结构;SHOWCREATETABLE显示完整的建表语句;SHOWTABLES只列出表名。8.删除表student及其全部数据,正确的语句是___。A.DELETETABLEstudent;B.DROPTABLEstudent;C.TRUNCATEstudent;D.REMOVETABLEstudent;【答案】B9.要清空表中所有数据、同时把自增计数器重置为初始值,且操作不能回滚,应使用___。A.DELETEFROM表名;B.TRUNCATETABLE表名;C.DROPTABLE表名;D.UPDATE表名SET列=NULL;【答案】B【解析】TRUNCATE属DDL,隐式提交、不可回滚,速度比DELETE快,并重置AUTO_INCREMENT;DELETE属DML,可回滚、可带WHERE。10.定义字段nameVARCHAR(20),其含义是___。A.固定占用20个字节的字符串B.最多存储20个字符的变长字符串C.最多存储20位数字D.只能存储20条记录【答案】B11.要存储商品价格(精确到分、总额不超过千万元),最合适的数据类型是___。A.FLOATB.DOUBLEC.DECIMAL(10,2)D.INT【答案】C【解析】金额应使用定点型DECIMAL,避免浮点误差;DECIMAL(10,2)表示共10位数字、其中小数2位。12.要存储"2026-09-0108:30:00"这样的日期与时间,应选用的类型是___。A.DATEB.TIMEC.DATETIMED.YEAR【答案】C13.关于AUTO_INCREMENT属性,下列说法正确的是___。A.可用于任意数据类型B.只能用于整数类型且该列须为键(主键或唯一键)C.必须与DEFAULT一起使用D.一张表可以有多个自增列【答案】B14.主键约束的特点是___。A.允许重复、允许为空B.不允许重复、不允许为空C.不允许重复、允许为空D.允许重复、不允许为空【答案】B15.向已有表student中增加一列birthday,正确的语句是___。A.ALTERTABLEstudentADDbirthdayDATE;B.ALTERTABLEstudentINSERTbirthdayDATE;C.UPDATETABLEstudentADDbirthdayDATE;D.MODIFYTABLEstudentADDbirthdayDATE;【答案】A16.要修改表student中name列的类型为VARCHAR(50),应使用___。A.ALTERTABLEstudentMODIFYnameVARCHAR(50);B.ALTERTABLEstudentCHANGEnameVARCHAR(50);C.UPDATEstudentSETnameVARCHAR(50);D.ALTERTABLEstudentADDnameVARCHAR(50);【答案】A【解析】MODIFY只改列定义、不改列名;CHANGE可同时改列名与类型,语法为CHANGE旧列名新列名新类型。17.把表student的列sname改名为name(类型不变),正确的语句是___。A.ALTERTABLEstudentRENAMEsnameTOname;B.ALTERTABLEstudentCHANGEsnamenameVARCHAR(20);C.ALTERTABLEstudentMODIFYsnamename;D.RENAMETABLEstudent.snameTOname;【答案】B18.建表时为列指定默认值,应使用的关键字是___。A.DEFAULTB.VALUEC.INITD.SET【答案】A19.要查看表student的完整建表语句(含存储引擎、字符集),应使用___。A.DESCstudent;B.SHOWCREATETABLEstudent;C.SHOWCOLUMNSFROMstudent;D.SELECT*FROMstudent;【答案】B20.在SQL语句分类中,CREATE、ALTER、DROP、TRUNCATE属于___。A.DML(数据操纵语言)B.DDL(数据定义语言)C.DCL(数据控制语言)D.DQL(数据查询语言)【答案】B(二)多项选择题(每题4分,共5题,20分)21.下列属于MySQL数值类型的有___。A.TINYINTB.INTC.DECIMALD.FLOATE.VARCHAR【答案】ABCD22.下列语句属于DDL(数据定义语言)的有___。A.CREATETABLEB.ALTERTABLEC.DROPTABLED.TRUNCATETABLEE.SELECT【答案】ABCD23.关于主键约束,下列说法正确的有___。A.一个表只能有一个主键B.主键列的值必须唯一C.主键列不允许为NULLD.主键可以由多个列组合而成(复合主键)E.定义主键会自动创建相应索引【答案】ABCDE24.关于AUTO_INCREMENT,下列说法正确的有___。A.只能用于整数类型的列B.该列必须是主键或唯一键C.执行TRUNCATETABLE后计数器复位D.建表时可通过AUTO_INCREMENT=n指定起始值E.可用于VARCHAR类型的列【答案】ABCD25.关于MySQL字符集,下列说法正确的有___。A.utf8mb4是完整的UTF-8实现,可存储emoji等4字节字符B.MySQL中的utf8实际是utf8mb3,最多3字节C.建库建表时可分别指定字符集与排序规则D.修改数据库字符集可用ALTERDATABASE语句E.字符集只需在服务器级设置,库表无需再设【答案】ABCD(三)判断题(每题2分,共10题,20分)26.一张表可以定义多个主键。【答案】错误【解析】一张表只能有一个主键,但主键可以由多列组成(复合主键);需要多列唯一时可用UNIQUE约束。27.InnoDB表的外键列允许取NULL值。【答案】正确28.TRUNCATETABLE删除的数据可以通过ROLLBACK恢复。【答案】错误29.DELETEFROM表名不写WHERE子句时,会删除表中所有行,但表结构保留。【答案】正确30.DROPTABLE只删除表中数据,保留表结构。【答案】错误31.与CHAR相比,VARCHAR更节省空间,适合长度变化较大的字符串。【答案】正确32.INT(11)中的11表示该列最多能存储11位数字。【答案】错误【解析】括号中的数字是显示宽度,不影响存储范围;MySQL8.0.19起整数类型的显示宽度已被废弃。33.MySQL中的数据库名和表名在所有操作系统上都区分大小写。【答案】错误【解析】是否区分由lower_case_table_names参数决定:Linux下默认区分,Windows与macOS下默认不区分。34.utf8mb4可以存储emoji表情等4字节字符。【答案】正确35.MySQL中字段名可以使用保留字,且无需加反引号。【答案】错误【解析】使用保留字作字段名必须用反引号(`)括起,否则会报语法错误,实际开发中应避免。(四)简答题(每题10分,共2题,20分)36.(10分)简述CHAR与VARCHAR的区别。【答案】(1)长度是否固定:CHAR是定长字符串,定义CHAR(n)后无论实际存入多少字符,都占用n个字符的存储空间,不足部分以空格补齐(检索时尾部空格被去掉);VARCHAR是变长字符串,只占用实际字符数加1~2字节长度前缀的空间。(2)存储方式:CHAR适合长度基本固定的数据,如性别(CHAR(1))、身份证号、邮政编码、MD5值;VARCHAR适合长度变化大的数据,如姓名、地址、备注。(3)空间与效率:CHAR存取速度快、无长度前缀开销,但短内容会浪费空间;VARCHAR节省空间,但更新变长内容时可能引起行迁移,速度略慢。(4)长度上限:CHAR的最大长度为255个字符;VARCHAR的最大长度受行长度与字符集限制(utf8mb4下单行最长65535字节,实际可用长度更小),超长文本应使用TEXT系列类型。(5)尾部空格处理:CHAR存入时会自动去除尾部空格(非严格模式下),VARCHAR保留尾部空格(MySQL5.0.3以后)。(6)选择建议:长度固定或很短(如1~4个字符)用CHAR;长度不定且平均长度远小于上限时用VARCHAR;不要一律使用VARCHAR(255),应按实际需求设定长度。37.(10分)写出创建数据库shop、在其中创建商品表goods的SQL语句。要求:goods含商品编号gid(整型、主键、自增)、商品名称gname(最多50个字符、非空)、单价price(定点数、共8位、小数2位、默认0)、上架日期putdate(日期型、默认取当前日期)、类别编号cid(整型、外键引用category表的cid列)。【答案】(1)创建数据库并指定字符集:CREATEDATABASEshopDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;USEshop;(2)创建类别表(外键的被引用表必须先存在):CREATETABLEcategory(cidINTPRIMARYKEYAUTO_INCREMENT,cnameVARCHAR(30)NOTNULL)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;(3)创建商品表:CREATETABLEgoods(gidINTPRIMARYKEYAUTO_INCREMENT,gnameVARCHAR(50)NOTNULL,priceDECIMAL(8,2)NOTNULLDEFAULT0.00,putdateDATEDEFAULT(CURRENT_DATE),cidINT,CONSTRAINTfk_goods_categoryFOREIGNKEY(cid)REFERENCEScategory(cid))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;(4)关键点说明:其一,自增列必须是键,写法为PRIMARYKEYAUTO_INCREMENT;其二,金额用DECIMAL而非FLOAT,避免精度误差;其三,默认值用DEFAULT子句,日期默认当前日期可写DEFAULT(CURRENT_DATE)(MySQL8.0.13起支持表达式默认值),5.7及以前应写DEFAULTCURRENT_DATE或在插入时用NOW()、CURDATE();其四,外键要求两表均为InnoDB、被引用列须有索引(主键自带),且必须先建父表;其五,显式指定ENGINE与CHARSET,避免因服务器默认值不同产生乱码。形考任务二数据操纵与单表查询(一)单项选择题(每题2分,共20题,40分)1.向表student中插入一条记录,正确的语句是___。A.INSERTINTOstudent(sid,sname)VALUES(1,'张三');B.INSERTstudentVALUES(1,'张三');C.ADDINTOstudentVALUES(1,'张三');D.APPENDstudent(sid,sname)VALUES(1,'张三');【答案】A2.用一条INSERT语句插入多条记录,正确的写法是___。A.INSERTINTOt(a)VALUES(1);(2);(3);B.INSERTINTOt(a)VALUES(1),(2),(3);C.INSERTINTOt(a)VALUES(1)AND(2)AND(3);D.INSERTINTOt(a)SET(1),(2),(3);【答案】B3.把表student中学号sid为1的学生姓名改为"李四",正确的语句是___。A.UPDATEstudentSETsname='李四'WHEREsid=1;B.UPDATEstudentsname='李四'WHEREsid=1;C.MODIFYstudentSETsname='李四'WHEREsid=1;D.ALTERstudentSETsname='李四'WHEREsid=1;【答案】A4.删除表score中成绩不及格(小于60分)的记录,正确的语句是___。A.DELETEFROMscoreWHEREgrade小于60;B.DELETEFROMscoreWHEREgradeNOT>=60;C.DROPFROMscoreWHEREgradeNOT>=60;D.DELETEscoreWHEREgradeNOT>=60;【答案】B5.查询表student的全部记录与全部列,最简洁的语句是___。A.SELECTALLFROMstudent;B.SELECT*FROMstudent;C.SELECTCOLUMNSFROMstudent;D.SELECTstudent.*;【答案】B6.查询时为列取别名,下列写法正确的是___。A.SELECTsnameAS姓名FROMstudent;B.SELECTsnameTO姓名FROMstudent;C.SELECTsnameALIAS姓名FROMstudent;D.SELECT姓名=snameFROMstudent;【答案】A7.查询student表中不重复的班级(class)列表,应使用___。A.SELECTclassFROMstudent;B.SELECTDISTINCTclassFROMstudent;C.SELECTUNIQUEclassFROMstudent;D.SELECTCOUNT(class)FROMstudent;【答案】B8.在WHERE子句中同时使用AND与OR,其优先级关系是___。A.OR高于ANDB.AND高于ORC.二者同级,从左到右D.无优先级,必须加括号【答案】B【解析】AND的优先级高于OR,混用时建议加括号明确意图,如(aORb)ANDc。9.表达式gradeBETWEEN60AND100等价于___。A.grade>60ANDgrade小于100B.grade>=60ANDgrade<=100C.grade>=60ORgrade<=100D.grade>60ORgrade<100【答案】B【解析】BETWEENAANDB包含两个端点,等价于"大于等于A且小于等于B"。10.要查询班级为"一班""二班"的学生,最简洁的写法是___。A.WHEREclass='一班'ORclass='二班'B.WHEREclassIN('一班','二班')C.WHEREclassLIKE'一班'AND'二班'D.WHEREclassBETWEEN'一班'AND'二班'【答案】B11.在LIKE匹配中,百分号(%)与下划线(_)的含义分别是___。A.匹配任意一个字符、匹配任意多个字符B.匹配任意多个字符、匹配任意一个字符C.都匹配任意多个字符D.分别匹配数字与字母【答案】B12.判断列score为空值,正确的写法是___。A.WHEREscore=NULLB.WHEREscoreISNULLC.WHEREscore==NULLD.WHEREISNULL=score【答案】B【解析】NULL表示"未知",任何与NULL的比较运算结果都是NULL(不成立),必须用ISNULL/ISNOTNULL。13.查询结果按成绩从高到低排列,正确的子句是___。A.ORDERBYgradeASCB.ORDERBYgradeDESCC.GROUPBYgradeDESCD.SORTBYgradeDESC【答案】B14.ORDERBYclass,gradeDESC的含义是___。A.先按grade降序,再按class升序B.先按class升序,class相同时按grade降序C.按class与grade之和排序D.只按grade降序【答案】B15.语句SELECT*FROMstudentLIMIT5,10;返回的是___。A.第1~5行中的第10行B.跳过前5行后的10行(即第6~15行)C.第5~10行D.随机10行【答案】B【解析】LIMIT有两个参数,格式为LIMIT偏移量,行数,偏移量从0开始计数。16.统计表student中记录的总行数,应使用___。A.SELECTSUM(*)FROMstudent;B.SELECTCOUNT(*)FROMstudent;C.SELECTTOTAL(*)FROMstudent;D.SELECTROWS(*)FROMstudent;【答案】B17.表student的phone列中有3行为NULL,执行SELECTCOUNT(phone)FROMstudent;的结果是___。A.全部行数B.全部行数减3C.3D.NULL【答案】B18.关于聚合函数,下列说法正确的是___。A.SUM、AVG会把NULL当作0参与计算B.SUM、AVG自动忽略NULL值C.MAX不能用于日期类型D.COUNT(*)会忽略NULL行【答案】B19.对分组后的结果进行筛选,应使用___。A.WHERE子句B.HAVING子句C.ORDERBY子句D.LIMIT子句【答案】B20.下列子句中,不能使用聚合函数的是___。A.SELECT子句B.HAVING子句C.WHERE子句D.ORDERBY子句【答案】C【解析】WHERE在分组之前逐行过滤,此时聚合值尚不存在;对聚合结果的筛选要用HAVING。(二)多项选择题(每题4分,共5题,20分)21.一个完整的SELECT语句可以包含的子句有___。A.SELECTB.FROMC.WHERED.GROUPBY与HAVINGE.ORDERBY与LIMIT【答案】ABCDE22.下列属于聚合函数的有___。A.COUNT()B.SUM()C.AVG()D.MAX()E.CONCAT()【答案】ABCD23.关于NULL的说法,正确的有___。A.NULL表示"未知"或"没有值"B.不能用等号与NULL比较,要用ISNULLC.COUNT(列名)会忽略该列为NULL的行D.NULL参与算术运算的结果仍为NULLE.NULL与空字符串''是同一回事【答案】ABCD24.关于LIMIT子句,说法正确的有___。A.LIMITn表示取前n行B.LIMIToffset,n表示跳过offset行后取n行C.常用于实现分页D.与ORDERBY配合才能保证结果顺序确定E.LIMIT必须与GROUPBY一起使用【答案】ABCD25.关于分组查询,说法正确的有___。A.GROUPBY按指定列的值把行分成若干组B.分组后SELECT列表一般只能出现分组列和聚合函数(受ONLY_FULL_GROUP_BY约束)C.HAVING用于对分组结果筛选D.WHERE在分组之前执行,HAVING在分组之后执行E.GROUPBY之后不能再使用ORDERBY【答案】ABCD(三)判断题(每题2分,共10题,20分)26.SELECT语句中WHERE子句在GROUPBY子句之前执行。【答案】正确27.HAVING子句可以使用聚合函数作为筛选条件。【答案】正确28.COUNT(*)与COUNT(某列)的结果在任何情况下都相同。【答案】错误29.ORDERBY子句中可以使用SELECT列表中定义的列别名。【答案】正确30.不使用ORDERBY时,LIMIT返回的记录顺序是确定的。【答案】错误31.UPDATE语句不写WHERE子句时,只修改表中的第一行。【答案】错误【解析】不写WHERE会修改表中所有行,是危险操作,执行前应先用SELECT确认范围。32.INSERTINTO表名VALUES(...),值的顺序必须与表中列的定义顺序一致。【答案】正确33.BETWEENAANDB的匹配范围包含A和B两个端点。【答案】正确34.字符串比较是否区分大小写,取决于列的排序规则(collation)。【答案】正确35.聚合函数可以与普通列随意混用,不需要GROUPBY。【答案】错误(四)简答题(每题10分,共2题,20分)36.(10分)设学生成绩表score(sid,cid,grade),写出查询"平均分高于80分的课程编号及其平均分,并按平均分从高到低排列"的SQL语句,并说明该语句各子句的执行顺序。【答案】(1)SQL语句:SELECTcid,AVG(grade)ASavg_gradeFROMscoreGROUPBYcidHAVINGAVG(grade)>80ORDERBYavg_gradeDESC;(2)执行顺序:FROM定位数据源→WHERE逐行过滤(本语句无WHERE)→GROUPBY按cid分组→聚合函数计算每组的平均分→HAVING筛选出平均分大于80的组→SELECT投影出列并计算别名→ORDERBY按别名降序排序→最后LIMIT限制返回行数(本语句无LIMIT)。(3)关键点:其一,条件是针对"组"的,必须用HAVING而不能用WHERE,因为WHERE执行时平均分尚未算出;其二,HAVING中可重复写聚合表达式,也可引用SELECT中的别名(MySQL支持,标准SQL不建议);其三,SELECT中出现的非聚合列必须包含在GROUPBY中,否则在ONLY_FULL_GROUP_BY模式下报错;其四,若只想看前若干名,可在末尾加LIMITn。37.(10分)简述WHERE与HAVING的区别。【答案】(1)作用对象不同:WHERE作用于表中的每一行原始记录,逐行判断是否保留;HAVING作用于GROUPBY分组后的结果集,判断整个组是否保留。(2)执行时机不同:WHERE在FROM之后、GROUPBY之前执行;HAVING在GROUPBY与聚合计算之后执行,位于SELECT之前。(3)能否使用聚合函数:WHERE中不能使用聚合函数(此时分组尚未发生,无聚合值可用);HAVING中可以使用聚合函数,如HAVINGCOUNT(*)>5。(4)能否使用列别名:WHERE不能引用SELECT中定义的别名(SELECT尚未执行);HAVING与ORDERBY可以引用别名(MySQL扩展)。(5)使用场景不同:对单行属性做条件过滤(如"成绩大于60""班级为一班")用WHERE;对分组统计结果做筛选(如"平均分大于80的班级""人数超过30的部门")用HAVING。(6)性能差异:WHERE先过滤可大幅减少参与分组的数据量,效率更高,因此凡能用WHERE表达的条件都应尽量写在WHERE中,HAVING只承担必须依赖聚合值的筛选。(7)二者可同时出现:SQL中先执行WHERE再执行HAVING,如"查询一班中平均分高于80的学生"可写为WHEREclass='一班'GROUPBYsidHAVINGAVG(grade)>80。形考任务三多表查询、视图、索引与事务(一)单项选择题(每题2分,共20题,40分)1.内连接(INNERJOIN)返回的结果是___。A.左表全部行B.右表全部行C.两表中满足连接条件的行D.两表的笛卡尔积【答案】C2.左外连接(LEFTJOIN)的特点是___。A.只返回两表匹配的行B.返回左表全部行,右表无匹配时相应列为NULLC.返回右表全部行,左表无匹配时相应列为NULLD.返回两表所有行【答案】B3.关于FULLOUTERJOIN,下列说法正确的是___。A.MySQL直接支持FULLOUTERJOINB.MySQL不支持FULLOUTERJOIN,可用LEFTJOIN与RIGHTJOIN的UNION模拟C.MySQL用FULLJOIN表示全连接D.MySQL中FULLOUTERJOIN与CROSSJOIN等价【答案】B4.不写连接条件、直接FROMa,b的查询结果是___。A.两表行数之和B.两表的笛卡尔积C.只返回匹配行D.语法错误【答案】B5.一张表与自身进行连接查询(如查询"每名员工的姓名及其经理姓名"),这种连接称为___。A.交叉连接B.自连接C.外连接D.自然连接【答案】B【解析】自连接必须为表起两个不同的别名,否则无法区分同一表的不同角色。6.子查询SELECT*FROMstudentWHEREclassIN(SELECTclassFROMstudentWHEREsname='张三');中,括号内的查询称为___。A.联合查询B.子查询C.连接查询D.视图【答案】B7.关于EXISTS子查询,下列说法正确的是___。A.只关心子查询是否返回行,不关心具体值B.必须返回单行单列C.不能与外层查询关联D.等价于NOTIN【答案】A8.把子查询放在FROM子句中时,必须___。A.为子查询起别名B.加ORDERBYC.加GROUPBYD.使用EXISTS【答案】A9.关于UNION与UNIONALL,下列说法正确的是___。A.UNION保留重复行,UNIONALL去重B.UNION去重,UNIONALL保留重复行C.两者完全等价D.UNIONALL要求列数不同【答案】B10.视图在MySQL中本质上是一个___。A.物理存储数据的数据表B.根据查询定义生成的虚拟表,本身不存储数据C.索引结构D.存储过程【答案】B11.创建视图v_stu的语句是___。A.CREATEVIEWv_stuASSELECT*FROMstudent;B.CREATETABLEv_stuASSELECT*FROMstudent;C.MAKEVIEWv_stuSELECT*FROMstudent;D.CREATEVIEWv_stuFROMstudent;【答案】A12.下列不属于视图作用的是___。A.简化复杂查询B.实现数据的逻辑独立性C.控制用户可见的数据范围D.自动提高所有查询的物理读写速度【答案】D13.MySQL中InnoDB表的索引默认采用的数据结构是___。A.哈希表B.B+树C.二叉查找树D.红黑树【答案】B14.定义主键后,MySQL会自动创建___。A.普通索引B.唯一索引(聚簇索引)C.全文索引D.前缀索引【答案】B15.下列情形中,最可能导致索引失效的是___。A.WHEREname='张三'B.WHEREYEAR(birthday)=1990C.WHEREsidBETWEEN1AND100D.WHEREcidIN(1,2,3)【答案】B【解析】在索引列上使用函数或运算会使索引无法直接定位;应改写为birthday>='1990-01-01'ANDbirthday<'1991-01-01'。16.唯一索引允许插入的值是___。A.只能有一个NULLB.可以有多个NULL,但非NULL值必须唯一C.不允许NULLD.可以有重复的非NULL值【答案】B17.提交事务使用的语句是___。A.COMMITB.ROLLBACKC.SAVEPOINTD.BEGIN【答案】A18.InnoDB中保证事务原子性(可回滚)主要依靠___。A.redologB.undologC.binlogD.errorlog【答案】B19.MySQL的默认事务隔离级别是___。A.READUNCOMMITTEDB.READCOMMITTEDC.REPEATABLEREADD.SERIALIZABLE【答案】C20.一个事务读到了另一个事务尚未提交的修改,这种现象称为___。A.脏读B.不可重复读C.幻读D.丢失修改【答案】A(二)多项选择题(每题4分,共5题,20分)21.MySQL支持的连接类型有___。A.INNERJOINB.LEFTJOINC.RIGHTJOIND.CROSSJOINE.FULLOUTERJOIN【答案】ABCD22.关于索引,下列说法正确的有___。A.索引可以加快查询速度B.索引可以加速表与表之间的连接C.唯一索引可以保证列值的唯一性D.索引会占用额外的存储空间E.索引会降低插入、更新、删除的速度【答案】ABCDE23.事务的ACID特性包括___。A.原子性(Atomicity)B.一致性(Consistency)C.隔离性(Isolation)D.持久性(Durability)E.可扩展性(Scalability)【答案】ABCD24.SQL标准定义的事务隔离级别有___。A.READUNCOMMITTEDB.READCOMMITTEDC.REPEATABLEREADD.SERIALIZABLEE.READONLY【答案】ABCD25.关于视图,下列说法正确的有___。A.视图是基于查询定义的虚拟表B.视图的定义保存在数据字典中C.视图可以简化复杂查询D.通过视图可限制用户只能访问部分行列E.所有视图都可以直接执行INSERT、UPDATE、DELETE【答案】ABCD【解析】只有满足条件的视图(如不含聚合函数、DISTINCT、GROUPBY、UNION等)才是可更新视图。(三)判断题(每题2分,共10题,20分)26.索引建得越多越好,可以让所有操作都变快。【答案】错误27.视图中的数据在磁盘上单独物理存储。【答案】错误28.事务中执行DDL语句(如CREATETABLE)会隐式提交当前事务。【答案】正确29.LEFTJOIN中写在ON后的条件与写在WHERE后的条件效果完全相同。【答案】错误【解析】ON条件只影响右表能否匹配(左表行仍保留、右表列置NULL);WHERE条件在连接后过滤,会把右表为NULL的行也筛掉,从而退化为内连接。30.InnoDB的主键索引是聚簇索引,叶子节点存放整行数据。【答案】正确31.UNION默认会去除结果集中的重复行。【答案】正确32.子查询可以出现在SELECT、FROM、WHERE等子句中。【答案】正确33.为某列建立索引后,涉及该列的所有查询都一定变快。【答案】错误34.InnoDB支持行级锁,MyISAM只支持表级锁。【答案】正确35.执行ROLLBACK可以撤销已经COMMIT的事务。【答案】错误(四)简答题(每题10分,共2题,20分)36.(10分)简述索引的作用、创建语法以及索引失效的常见情形。【答案】(1)作用:索引是一种加快数据检索的数据结构(InnoDB为B+树),其作用包括:加快WHERE条件的数据定位,减少全表扫描;加速ORDERBY、GROUPBY的排序分组;加速表间连接;唯一索引与主键索引还能保证数据完整性。代价是占用磁盘空间,并降低INSERT、UPDATE、DELETE的速度,因为写操作需同步维护索引。(2)创建语法:建表时可用INDEX索引名(列名)、UNIQUEINDEX、PRIMARYKEY定义;也可在已有表上添加,如CREATEINDEXidx_nameONstudent(sname);或ALTERTABLEstudentADDINDEXidx_class(class);删除索引用DROPINDEXidx_nameONstudent;(或ALTERTABLE...DROPINDEX)。查看索引用SHOWINDEXFROMstudent;(3)索引失效的常见情形:一是在索引列上使用函数或表达式,如WHEREYEAR(birthday)=1990、WHEREid+1=10;二是发生隐式类型转换,如字符列用数字比较WHEREphone三是LIKE以通配符开头,如LIKE'%张';四是使用OR连接且其中一列无索引;五是使用NOT、不等于(!=、<>)导致优化器放弃索引;六是联合索引未遵循最左前缀原则;七是数据量很小或结果集占全表比例很大时,优化器主动选择全表扫描;八是索引列上使用ISNOTNULL且区分度极低。(4)使用建议:为WHERE、JOIN、ORDERBY中高频且区分度高的列建索引;联合索引把区分度高的列放在左边;避免冗余索引与过多索引;建索引后用EXPLAIN查看执行计划,确认key列是否命中。37.(10分)简述事务的概念、ACID特性,以及MySQL默认隔离级别与对应的并发问题。【答案】(1)事务的概念:事务是一组不可分割的SQL操作序列,这些操作要么全部成功执行、要么全部不执行,常用于转账、下单等需要保证数据一致性的场景。MySQL中只有InnoDB支持事务,默认自动提交(autocommit=1),可用STARTTRANSACTION或BEGIN显式开启,用COMMIT提交、ROLLBACK回滚,用SAVEPOINT设置保存点实现部分回滚。(2)ACID特性:原子性(Atomicity),事务中的操作要么全做要么全不做,靠undolog实现回滚;一致性(Consistency),事务执行前后数据库都处于合法状态,约束不被破坏;隔离性(Isolation),并发事务之间互不干扰,靠锁与MVCC实现;持久性(Durability),事务提交后修改永久保存,靠redolog与刷盘机制保证。(3)并发问题:脏读,一个事务读到另一个事务未提交的数据;不可重复读,同一事务内两次读取同一行结果不同(因其他事务提交了修改);幻读,同一事务内两次按同一条件查询,第二次多出了新插入的行。(4)隔离级别:READUNCOMMITTED允许脏读;READCOMMITTED避免脏读,但存在不可重复读与幻读;REPEATABLEREAD避免脏读与不可重复读,MySQL默认级别,InnoDB通过间隙锁在很大程度上避免了幻读;SERIALIZABLE串行化执行,完全避免上述问题但并发性能最差。(5)查看与设置:SELECT@@transaction_isolation;查看当前隔离级别,SETSESSIONTRANSACTIONISOLATIONLEVELREADCOMMITTED;设置会话级别。隔离级别越高,一致性越强、并发性能越低,应根据业务在一致性与性能之间权衡。形考任务四存储过程、触发器、用户权限与运维优化(一)单项选择题(每题2分,共20题,40分)1.创建存储过程p1的正确语句开头是___。A.CREATEPROCEDUREp1()B.CREATEFUNCTIONp1()C.CREATETRIGGERp1()D.CREATEVIEWp1()【答案】A2.调用存储过程p1应使用___。A.SELECTp1();B.CALLp1();C.EXECp1();D.RUNp1();【答案】B3.存储过程参数未指定方向时,默认为___。A.INB.OUTC.INOUTD.RETURNS【答案】A4.在命令行中创建含多条语句的存储过程前,通常要先执行DELIMITER//,其作用是___。A.改变语句结束符,避免分号提前结束语句B.设置字符集C.开启事务D.创建分隔表【答案】A5.触发器可以定义的触发时机是___。A.仅在BEFOREB.仅在AFTERC.BEFORE或AFTERD.随时调用【答案】C6.在DELETE触发器中,可以引用的虚拟行是___。A.只有NEWB.只有OLDC.NEW和OLD都可D.都不能引用【答案】B【解析】INSERT触发器只有NEW,DELETE触发器只有OLD,UPDATE触发器两者都有(OLD为修改前、NEW为修改后)。7.创建触发器的语句是___。A.CREATETRIGGERtrg_nameBEFOREINSERTONtFOREACHROW...B.CREATEPROCEDUREtrg_name...C.CREATEEVENTtrg_name...D.ALTERTRIGGERtrg_name...【答案】A8.创建存储函数时,必须指定___。A.返回值类型(RETURNS子句)B.OUT参数C.触发器名称D.视图定义【答案】A9.创建用户u1、仅允许从本机登录、密码为123456,正确的语句是___。A.CREATEUSER'u1'@'localhost'IDENTIFIEDBY'123456';B.CREATEUSERu1IDENTIFIED'123456';C.NEWUSER'u1'IDENTIFIEDBY'123456';D.CREATELOGIN'u1'@'localhost'PASSWORD'123456';【答案】A10.授予用户u1对shop库所有表的查询与插入权限,正确的语句是___。A.GRANTSELECT,INSERTONshop.*TO'u1'@'localhost';B.GRANTSELECT,INSERTTOshop.*ON'u1';C.ALLOWSELECT,INSERTONshop.*TOu1;D.SETPRIVILEGESELECTONshop.*FORu1;【答案】A11.回收用户u1的删除权限,应使用___。A.DELETEPRIVILEGEB.REVOKEDELETEONshop.*FROM'u1'@'localhost';C.DROPPRIVILEGEDELETEFROMu1;D.GRANTNONEONshop.*TOu1;【答案】B12.修改权限表后使权限立即生效,可执行___。A.FLUSHPRIVILEGES;B.COMMIT;C.RELOADTABLES;D.UPDATEPRIVILEGES;【答案】A13.查看当前登录用户的语句是___。A.SELECTCURRENT_USER();B.SHOWUSER;C.WHOAMI();D.SELECT@@USER;【答案】A14.把shop数据库备份到文件shop.sql,正确的命令是___。A.mysqldump-uroot-pshop>shop.sqlB.mysql-uroot-pshop>shop.sqlC.backupshopTOshop.sqlD.mysqldumpshop<shop.sql【答案】A15.在mysql命令行中导入shop.sql脚本,可以使用___。A.sourceshop.sqlB.LOADshop.sqlC.IMPORTshop.sqlD.RUNshop.sql【答案】A16.查看一条SELECT语句的执行计划,应在语句前加上___。A.EXPLAINB.DESCC.SHOWD.ANALYZETABLE【答案】A17.用于记录执行时间超过阈值的SQL的日志是___。A.错误日志B.慢查询日志C.二进制日志D.通用查询日志【答案】B18.下列SQL写法中,通常最需要优化的是___。A.SELECTsid,snameFROMstudentWHEREcid=3;B.SELECT*FROMstudent;C.SELECTCOUNT(*)FROMstudentWHEREcid=3;D.SELECTsnameFROMstudentWHEREsid=1;【答案】B【解析】SELECT*会取回全部列,增加网络传输与内存开销,且不利于覆盖索引;应只取所需列。19.进行大批量数据导入前,为提高速度常采取的措施是___。A.临时关闭自动提交、必要时关闭唯一性检查B.为每行单独提交事务C.导入前删除所有索引且不再重建D.把表改为MyISAM并关闭日志【答案】A20.MySQL的用户账号、权限等授权信息主要存放在___。A.information_schema库B.mysql库C.performance_schema库D.sys库【答案】B(二)多项选择题(每题4分,共5题,20分)21.使用存储过程的优点有___。A.一次编译、多次执行,提高性能B.减少应用程序与数据库之间的网络传输C.逻辑封装,便于复用与维护D.可通过授权限制用户直接访问表,提高安全性E.自动为相关表建立索引【答案】ABCD22.触发器可以定义在下列哪些事件上___。A.BEFOREINSERTB.AFTERINSERTC.BEFOREUPDATED.AFTERUPDATEE.BEFOREDELETE【答案】ABCDE23.MySQL中用户与权限管理常用的语句有___。A.CREATEUSERB.GRANTC.REVOKED.DROPUSERE.ALTERUSER【答案】ABCDE24.MySQL常用的备份与恢复方式有___。A.mysqldump逻辑备份B.直接复制数据文件的物理备份C.二进制日志(binlog)增量恢复D.用source或mysql命令导入脚本恢复E.用SELECTINTOOUTFILE导出数据【答案】ABCDE25.数据库性能优化的常用措施有___。A.为高频查询条件建立合适索引B.避免SELECT*,只取必要列C.优化SQL写法,避免在索引列上使用函数D.大表分页时用延迟关联或游标方式E.合理设计表结构,适当冗余以减少多表连接【答案】ABCDE(三)判断题(每题2分,共10题,20分)26.存储过程可以带有OUT参数,并通过它向调用者返回结果。【答案】正确27.触发器需要用户显式调用才会执行。【答案】错误【解析】触发器由INSERT、UPDATE、DELETE事件自动激发,不能像存储过程那样用CALL调用。28.删除表时,定义在该表上的触发器会被自动删除。【答案】正确29.执行GRANT语句后,必须再执行FLUSHPRIVILEGES权限才生效。【答案】错误【解析】GRANT、REVOKE、CREATEUSER等语句会直接更新授权表并立即生效;只有在直接用INSERT、UPDATE修改mysql库的权限表时,才需要FLUSHPRIVILEGES。30.mysqldump默认导出的脚本既包含建表语句,也包含数据。【答案】正确31.EXPLAIN的输出可以帮助判断查询是否使用了索引。【答案】正确32.MySQL中可以在视图上创建索引。【答案】错误【解析】MySQL不支持在视图上建索引;需要提升视图查询性能时,应为视图所依赖的基表建索引。33.root用户拥有全部权限,且不能被删除。【答案】错误34.存储函数可以在SELECT等SQL语句中像内置函数一样调用。【答案】正确35.慢查询日志默认处于开启状态。【答案】错误(四)简答题(每题10分,共2题,20分)36.(10分)简述存储过程与存储函数的区别。【答案】(1)定义关键字不同:存储过程用CREATEPROCEDURE定义,存储函数用CREATEFUNCTION定义。(2)返回值不同:存储过程可以有零个或多个OUT、INOUT参数返回结果,也可以返回结果集,但本身没有RETURN返回值;存储函数必须用RETURNS声明返回类型,并在函数体中用RETURN返回一个值,且只能返回单值。(3)调用方式不同:存储过程用CALL语句独立调用;存储函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年建筑物拆除和场地准备活动行业发展前景研判报告及未来五至十年服务化与定制化趋势
- 2026年2-氯-4-氟吡啶行业洞察报告及未来五至十年发展趋势报告
- 2026年防水工程行业洞察报告及未来五至十年发展趋势报告
- 2026年吉林省通化市公务员人员招聘考试模拟试题与答案详解
- 2026年内江市东兴区公务员人员招聘考试备考试题与答案详解
- 2026年有色金属铸造行业消费行为研究报告及未来五至十年降本增效与利润率修复
- 2026年骨肉瘤诊疗指南
- 上海市浦东新区第四署达标名校2027届中考考前最后一卷物理试卷含解析
- 2026年国家开放大学(电大)本科公司概论练习题带答案
- 2026年畜牧技师模拟考试卷带答案
- 2026重庆国际物流枢纽园区建设有限责任公司及子公司招聘19人笔试模拟试题及答案解析
- 检察官遴选考试真题及答案解析
- 江苏省无锡市梅村高级中学2025-2026学年高一上学期10月阶段检测物理试卷(含答案)
- 生物酶制剂生产流程技术指南
- TSG08-2026《特种设备使用管理规则》解析
- 北师大版四年级上册书法练习指导 教案
- 人教版小学语文五年级上册第五单元习作:介绍一种事物 课堂学习笔记+参考范文5篇
- 中小学以家校协同为抓手落实“健康第一”教育理念实施方案
- 国家突发公共卫生事件相关信息报告管理工作规范
- 主播孵化培训教程课件
- 手术室器械护士年度工作汇报
评论
0/150
提交评论