《MySQL数据库开发》期末复习题
考试题型
一、单选题(每小题 2 分,共 40分)
二、判断题(每小题1分,打”√”或”×”,共10分)
三、 问答题(共15分,每小题5分)
四、综合题 (共35分,每小题5分)
一、填空
1、用来表示数据库中行之间的关系的机制称为______外键_约束。
2、_____字符集___是一套符号与编码,它包括编码规则以定义字符如何被编码为数字。
3、MySQL程序选项有两种通用形式:_______长选项__ 和 __短选项_________。
4、MySQL数据类型分为四大主要类别:______数值___、__字符______、__二进制_______、_____时间____。
5、_____存储程序_____是保存在服务器里的一组SQL语句的集合。
6、_____锁_是一种用来防止多个客户端时访问数据而产生问题的机制。
7、_____事务_是将一个数据处理执行步骤的集合作为一个单一单元来处理。
8、______innoDB____引擎是目前唯一可提供外键实现支持的引擎。
9、CREATE ___temporary__________ TABLE创建临时表。
10、_______union_关键字能够将两个或多个SELECT语句的结果连接起来。
选择题主要在认证复习题中。
二、选择(单选)
每小题 2 分,共 40分
1、哪个连接语句的格式是错误的(D )
(A)mysql - - host=. (B)mysql –h .
(C)mysql –. (D)mysql –H .
2、查看MySQL版本语句是(A )
(A)mysql - - version (B)mysql - - VERSION
(C)mysql - - help (D)mysql - - v
3、设置语句结束符的命令是(C )
(A)set (B)end (C)delimiter (D)finish
4、设置MySQL提示符的命令是( B)
(A)tip (B)prompt (C)popup (D)message
5、导入sql脚本文件的命令是(A )
(A)source (B)script (C)file (D)sql
6、关于SELECT语句以下哪一个描述是错误的(C )
(A)SELECT语句用于查询一个表或多个表的数据。
(B)SELECT语句属于数据操作语言(DML)。
(C)SELECT语句的列必需是基于表的列的。
(D)SELECT语句表示数据库中一组特定的数据记录。
7、ENUM类型的字段level定义为(LOW、MIDDLE、HIGH),ORDER BY level asc的顺序是( B)
(A)HIGH、LOW、MIDDLE (B)LOW、MIDDLE、HIGH
(C)MIDDLE、LOW、HIGH (D)HIGH、MIDDLE、LOW
8、SELECT * FROM city limit 5,10描述正确的是(C )
(A)获取第6条到第10条记录。 (B)获取第5条到第10条记录。
(C)获取第6条到第15条记录。 (D)获取第5条到第15条记录。
9、GROUP_CONCAT()函数作用是(A )
(A)将每组的结果字符串连接起来 (B)将每组的结果累加
(C)统计每组的记录数 (D)统计每组的平均值
10、GROUP子句带WITH ROLLUP的作用是(D )
(A)将每组的结果累加 (B)统计每组的平均值
(C)统计每组的记录数 (D)产生多个级别的统计值
11、查看全局SQL模式的命令是( C)
(A)select sql_mode (B)select
(C)select (D)select
12、关于在非严格模式下处理无效值,哪个是错误的( D)
(A)基于列定义的限制隐含值来执行类型转化。
(B)在可能的情况下调整无效的输入值为合法值,并产生警告信息。
(C)转换超出围的值为围的值。
(D)拒绝无效值,产生错误。
13、关于在严格模式下处理无效值,哪个是错误的( A)
(A)允许超出围的值
(B)拒绝超出围的值。
(C)拒绝不正确数据类型的值。
(D)拒绝没有缺省值的非空列。
14、VARCHAR类型字段保存最大的字符数是( C)
(A)255 (B) 1025 (C)65533 (D)65535
15、查看系统中可用的字符集命令是(A )
(A)show character set (B)show collation
(C)show character (D)show set
16、关于DATETIME与TIMESTAMP两种数据类型的描述,错误的是( B)
(A)两者值的围不一样。
(B)两者值的围一样。
(C)两者占用空间不一样。
(D)TIMESTAMP可以自动记录当前日期时间。
17、在非严格模式下保存250到TINYINT类型字段时实际保存值是( C)
(A)250 (B)0 (C)127 (D)128
18、SELECT GREATEST(‘ab’,’cd’,’ef’,’gh’)结果是(D )
(A)ab (B)cd (C)ef (D)gh
19、SELECT LEAST(‘ab’,’cd’,’ef’,’gh’)结果是( A)
(A)ab (B)cd (C)ef (D)gh
20、SELECT FLOOR, FLOOR的结果是( A)
(A)-15,14 (B)-15,15 (C)-14,14 (D)-14,15
21、SELECT CEILING, CEILING的结果是( D)
(A)-15,14 (B)-15,15 (C)-14,14 (D)-14,15
22、SELECT LOCATE(‘to’, ‘Welcome to China’)的结果是( C)
(A)7 (B)8 (C)9 (D)10
23、SELECT SUBSTRING(‘Welcome to China’, 9, 2)的结果是(B )
(A)Welcome (B)to (C)China (D)Welcome to
24、SELECT SUBSTRING_INDEX(‘Welcome to China’, ‘to’, -1)的结果是(C)
(A)Welcome (B)to (C) China (D)Welcome to
25、SELECT CONCAT_WS(‘/’, ‘A’, NULL, ‘B’, NULL)的结果是( C)
(A)AB (B)NULL (C) A/B (D)A1)Error:错误消息显示了一个
严重的问题,并组织服务器完成该请求。
(2)warning:警告消息显示了服务器可以继续处理该请求的问题。
(3)note:提示消息只是一个信息。
B.(1)show warnings;
(2)show errors;
(3)show notes;
5、将下列存储过程补充完整
mysql > _____________delimiter________
mysql > CREATE PROCEDURE pro07(score INT)
->
-> BEGIN
-> ___declare________ var1 VARCHAR(32) default 'XX' ;
-> IF (score>79) THEN SET var1='优秀';
-> ELSEIF (score>69) THEN SET var1='良';
-> ELSEIF (score>59) THEN SET var1='及格';
-> ELSE SET var1='不及格';
-> END IF;
-> SELECT var1 ;
-> _____end__
-> ‘valuen’)
SET类型
集合类型
从给定的列表中选择多个组合为一个有效的值
SET (‘value1’, …., ‘valuen’)
答:ENUM和SET都是比较特殊的字符串数据列类型,它们的取值围是一个预先定义好的列表。ENUM或SET数据列的取值只能从这个列表中进行选择。ENUM和SET的主要区别是:
ENUM只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最多允许有65535个成员。例如:ENUM(\"N\表示,该数据列的取值要么是\"Y\",要么就是\"N\"。
SET可取多值。它的合法取值列表最多允许有64个成员。空字符串也是一个合法的SET值。
ENUM和SET的值是以字符串形式出现的,但在部,MySQL以数值的形式存储它们。
ENUM的合法取值列表中的字符串被按声明定义的顺序被编号,从1开始。
SET的编号不是按顺序进行编号的,SET中每一个合法取值都对应着SET值里的一个位。第一个合法取值对应0位,第二个合法取值对应1位,以此类推,如果数值形式的SET值等于0,则说明它是一个空字符串,如果某个合法的取值出现在SET数据列里,与之对应的位就会被置位;如果某个合法的取值没有出现在SET数据列里,与之对应的位就会被清零。正因为SET值与位有这样的对应关系,所以SET数据列的多个合法取值才能同时出现并构成SET值。
9、请说明truncate table和delete from的区别。
DELETE from
• 通过where指定删除围
• 执行效率低
• 返回被删除的记录 数
• 面向事务
TRUNCATE table
• 只能删除全部数据
• 执行效率高
• 返回值为0
• 没有事务
答:TRUNCATE TABLE 和不带 WHERE 的 DELETE 功能是一样的,都是删除表中的所有数据,不过 TRUNCATE TABLE 速度更快,占用的日志更少,这是因为 TRUNCATE TABLE 直接释放数据页并且在事务日志中也只记录数据页的释放,而 DELETE 是一行一行地删除,在事务日志中要记录每一条记录的删除。那么可不可以用 TRUNCATE TABLE 代替不带 WHERE 的 DELETE 呢在以下情况是不行的:
1、要保留标识的情况下不能用 TRUNCATE TABLE,因为 TRUNCATE TABLE 会重置标识。
2、需要使用触发器的情况下不能使用 TRUNCATE TABLE ,它不会激发触发器。
3、对于由 FOREIGN KEY 约束引用的表(即主键所在的表,不是外键所在的表)不能使用 TRUNCATE TABLE。
4、对于参与了索引视图的表不能使用 TRUNCATE TABLE ,注意指索引视图,并非普通视图。
10、请说明mysql数据库中标识符大小写敏感规则
答:(1)数据库、表的标识符依赖于操作系统的文件系统以及系统变量lower_case_table_names的设置
(2) 列、索引和存储过程标识符大小写不敏感
(3) 列别名也不敏感
(4) 触发器的大小写敏感规则同表和数据库(但不受lower_case_table_names影响)
11、存储过程和存储函数有什么区别(5分)
答:存储过程是一系列保存在数据库里的指令,过程将按照指令执行但不会返回任何值,该过程由call语句调用,并且只能使用输出变量来传递返回值。
存储函数是一系列保存在数据库里的指令,并且返回一个值。就像其他任何函数一样,函数可在语句中被调用,并返回一个值。
12、排序顺序一般服从什么规则,可以从数字,字母,汉字等角度进行说明。
答:排序顺序一般服从以下规则:
1.数字<字母<汉字
2.数字0-9,从小到大,15>9如果数字变为字符型那就不一定按照数字大小规律‘15’<’2’
3.字母:A 五、编程题 学生成绩数据库(库名stuDB)下有三表,表结构如下。 XS表(学生情况表): 学号 char(6) 不允许为空 主键 char(8) 不允许为空 专业名 char(10) 允许为空 性别 int(1) 男 1,女0 出生日期 date 系统默认 不允许为空 总学分 tinyint(1) 允许为空 照片 blob KC表(课程表): 课程号 char(3) 不允许为空 主键 课程名 char(16) 开课学期 tinyint(1)学时 tinyint(1)学分 tinyint(1)XS_KC表(成绩表): 学号 char(6) 课程号 char(3) 成绩 tinyint(1) 学分 tinyint(1) 根据这三表完成下列操作: 不允许为空 不允许为空 不允许为空 允许为空 不允许为空 不允许为空 允许为空 允许为空 只能为1—8 主键 主键 1、 写出三表的建表语句 create database sxcj; use sxcj create table xs ( sno char(6) primary key , Sname char(8) not null, Zhuanyeming char(10) null, Sex tinyint(1) not null check(sex int(0,1)), sbir date not null, record tinytin(1) null, photo blob null, comment text null )engine=InooDB; Create table kc ( kno char(3) primary key, Kname char(16) not null, Kaikexueqi tinyint(1) not null default 1 check(kaikexueqi >=1 and kaikexueqi <= 8), Xueshi tinyint(1) not null, Xuefen tinyint(1) null )engine=InooDB; Create table xs_kc ( sno char(6) not null, Kno char(3) not null, Chengji tinyint(1) null, Primary key(sno,kno), Foreign key(sno) references xs(sno) on delete cascade on update cascade, Foreign key(kno) references kc(kno) on delete cascade on update cascade ); (2)Create table xc_kc( 学号 char(6) foreign key references xs(学号), 课程号 char(3) foreign key references kc(课程号), 成绩tinyint(1), 学分tinyint(1), Primary key (学号,课程号)); 2、 给成绩表增加一个列“补考成绩”,允许为空 Alert table 成绩add column 补考成绩 tinyint(1); 3、查询课程表中所有学生的情况 Select * from kc; 4、删除课程表中课程名称为C语言的记录 Delete from kc where 课程名=‘c语言’; 5、添加一要学生表的记录,该记录信息为学生的个人信息 Insert into xs values(学号,’自己的’,‘专业’,1,’1991-09-12’,60,null); 6、创建学生表的一个名为stucopy的拷贝,并且复制其容 Select *into stucopy from xs 或 create table stucopy as select *from xs 7、查询xs表中计算机系各同学的学号,和总学分,对其总分按以下规则进行替换;若总学分为空值,替换为”尚未选课”;若总学分小于60,替换为“不及格”;若总学分在60—80之间,则替换为“合格”;若总学分大于80,替换为“优秀”。列表题更改为“等级”。 Select 学号, case When 总学分is null then ‘尚未选课’ When 总学分<60 then ‘不及格’ When 总学分>=60 and 总学分<=80 then’合格’ When 总学分>80 then ‘优秀’end as 等级 From xs Where 专业名=‘计算机系’ 8、查询xs表中计算机系各同学的学号,和性别,对其性别按以下规则进行替换;若性别为空值,替换为”未设置性别”;若性别为0,替换为“女”;若性别为1,替换为“男”;列表题更改为“性别”。 Select 学号, case When 性别 is null then ‘未设置性别’ When 性别=‘0’ then‘女’ When 性别=‘1’ then‘男’ end as ‘性别’ From xs Where 专业名=‘计算机系’ 9、查询出没有选课的学生信息 Select *from xs where 学号not in ( Select 学号 From xs_kc); 10、删除成绩表中学分字段 Alert table xs_kc drop column 学分 11、新建“test”用户,密码为“111”,授予对stuDB数据库中所有表的select权限。 Create user ‘test’ ’localhost’ Indentified by’111’; Grant select on xs to test; Grant select on kc to test; Grant select on xs_kc to test; 合并为 :grant select on stuDB to test; 12、用from的join关键字表达下列查询:查找选修了“mysql”课程且成绩及格的学生学号、、课程名及成绩。 Select 学号,,课程名,成绩 From xs Inner join xs_kc on xc.学号=xs_kc.学号 Inner join kc on kc.课程号=xs_kc.课程号 Where 课程名=‘mysql’ and 成绩>=60 13、查询学生表中所有学分不为空的信息 Select *from xs Where 总学分is not null 14、查询出学生重复的学生信息 Select *from xs t2 where t1.=t2. and t1.学分<>t2.学分 15、创建存储过程sp_kc,返回kc表中的总记录数,并调用该存储过程。 Create procedure sp_kc() Select count(*) from kc; Call sp-kc(); 1、 给XS表增加一个列“备注”,数据类型为text,不允许为空 alter from xs add comment text not null; 2、 创建表 XS的一个名为student的拷贝,并且复制其容 Create table student as (select * from xs); 3、 用from的join关键字表达下列查询:查找选修了“计算机基础”课程且成绩在80分以上的学生学号、、课程名及成绩。 Select ,sname,kname,chengji From xs join xs_kc on = Join kc on xs_kc on = Where kname=’计算机基础’ and chengji>=80; 4、 用root用户新建“dsh”用户,密码为“shangwu”,授予对sxcj数据库中所有表的select权限。 Create user ‘dshlocalhost’ identified by ‘shangwu’; Grani select On sxcj.* To dshlocalhost; A预编译的语法: Select *from city where countrycode=; 外部再传入参数值即可 Select *from city where countrycode=’usa’; 这种操作就形成存储程序(过程、函数)的雏形 存储程序:定义与调用 引入存储程序的原因:预编译程序仅在当前会话窗口有效,当前会话结束时预命编译的程序就消失(变量最好手工释放以节省资源)因此有些常用程序就有必要存储起来方便后续使用,这种存储预编译的程序称为存储程序(过程、函数) 因篇幅问题不能全部显示,请点此查看更多更全内容