MySQL习题及答案.docx
《MySQL习题及答案.docx》由会员分享,可在线阅读,更多相关《MySQL习题及答案.docx(17页珍藏版)》请在冰点文库上搜索。
MySQL习题及答案
MySQL习题及答案
MySQL习题及答案
在缺省模式下,MYSQL是autocommit模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,mysql是不支持事务的。
但是如果你的MYSQL表类型是使用InnoDBTables或BDBtables的话,你的MYSQL就可以使用事务处理,使用SETAUTOCOMMIT=0就可以使MYSQL允许在非autocommit模式,
在非autocommit模式下,你必须使用COMMIT来提交你的更改,或者用ROLLBACK来回滚你的更改。
示例如下:
STARTTRANSACTION;
SELECT@A:
=SUM(salary)FROMtable1WHEREtype=1;
UPDATEtable2SETsummmary=@AWHEREtype=1;
COMMIT;
MYSQL相比于其他数据库有哪些特点?
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,现在已经被Sun公司收购,支持FreeBSD、Linux、MAC、Windows等多种操作系统
与其他的大型数据库例如Oracle、DB2、SQLServer等相比功能稍弱一些
1、可以处理拥有上千万条记录的大型数据
2、支持常见的SQL语句规范
3、可移植行高,安装简单小巧
4、良好的运行效率,有丰富信息的网络支持
5、调试、管理,优化简单(相对其他大型数据库)
介绍一下mysql的日期和时间函数
这里是一个使用日期函数的例子。
下面的查询选择所有date_col值在最后30天内的记录。
mysql>SELECTsomethingFROMtbl_name
WHERETO_DAYS(NOW)–TO_DAYS(date_col)<=30;
DAYOFWEEK(date)
返回date的星期索引(1=Sunday,2=Monday,...7=Saturday)。
索引值符合ODBC的标准。
mysql>SELECTDAYOFWEEK(’1998-02-03′);
->3
WEEKDAY(date)
返回date的星期索引(0=Monday,1=Tuesday,?
6=Sunday):
mysql>SELECTWEEKDAY(’1998-02-0322:
23:
00′);
->1
mysql>SELECTWEEKDAY(’1997-11-05′);
->2
DAYOFMONTH(date)
返回date是一月中的第几天,范围为1到31:
mysql>SELECTDAYOFMONTH(’1998-02-03′);
->3
DAYOFYEAR(date)
返回date是一年中的第几天,范围为1到366:
mysql>SELECTDAYOFYEAR(’1998-02-03′);
->34
MONTH(date)
返回date中的月份,范围为1到12:
mysql>SELECTMONTH(’1998-02-03′);
->2
DAYNAME(date)
返回date的星期名:
mysql>SELECTDAYNAME(”1998-02-05″);
->?
Thursday?
MONTHNAME(date)
返回date的月份名:
mysql>SELECTMONTHNAME(”1998-02-05″);
->?
February?
QUARTER(date)
返回date在一年中的季度,范围为1到4:
mysql>SELECTQUARTER(’98-04-01′);
->2
WEEK(date)
WEEK(date,first)
对于星期日是一周中的第一天的场合,如果函数只有一个参数调用,返回date为一年的第几周,返回值范围为0到53(是的,可能有第53周的开始)。
两个参数形式的WEEK允许你指定一周是否以星期日或星期一开始,以及返回值为0-53还是1-52。
这里的一个表显示第二个参数是如何工作的:
0一周以星期日开始,返回值范围为0-53
1一周以星期一开始,返回值范围为0-53
2一周以星期日开始,返回值范围为1-53
3一周以星期一开始,返回值范围为1-53(ISO8601)
mysql>SELECTWEEK(’1998-02-20′);
->7
mysql>SELECTWEEK(’1998-02-20′,0);
->7
mysql>SELECTWEEK(’1998-02-20′,1);
->8
mysql>SELECTWEEK(’1998-12-31′,1);
->53
注意,在版本4.0中,WEEK(#,0)被更改为匹配USA历法。
注意,如果一周是上一年的最后一周,当你没有使用2或3做为可选参数时,MySQL将返回0:
mysql>SELECTYEAR(’2000-01-01′),WEEK(’2000-01-01′,0);
->2000,0
mysql>SELECTWEEK(’2000-01-01′,2);
->52
你可能会争辩说,当给定的日期值实际上是1999年的第52周的一部分时,MySQL对WEEK函数应该返回52。
我们决定返回0,是因为我们希望该函数返回“在指定年份中是第几周”。
当与其它的提取日期值中的月日值的函数结合使用时,这使得WEEK函数的用法可靠。
如果你更希望能得到恰当的年-周值,那么你应该使用参数2或3做为可选参数,或者使用函数YEARWEEK:
mysql>SELECTYEARWEEK(’2000-01-01′);
->199952
mysql>SELECTMID(YEARWEEK(’2000-01-01′),5,2);
->52
YEAR(date)
返回date的年份,范围为1000到9999:
mysql>SELECTYEAR(’98-02-03′);
->1998
YEARWEEK(date)
YEARWEEK(date,first)
返回一个日期值是的哪一年的哪一周。
第二个参数的形式与作用完全与WEEK的第二个参数一致。
注意,对于给定的日期参数是一年的第一周或最后一周的,返回的年份值可能与日期参数给出的年份不一致:
mysql>SELECTYEARWEEK(’1987-01-01′);
->198653
注意,对于可选参数0或1,周值的返回值不同于WEEK函数所返回值(0),WEEK根据给定的年语境返回周值。
HOUR(time)
返回time的小时值,范围为0到23:
mysql>SELECTHOUR(’10:
05:
03′);
->10
MINUTE(time)
返回time的分钟值,范围为0到59:
mysql>SELECTMINUTE(’98-02-0310:
05:
03′);
->5
SECOND(time)
返回time的秒值,范围为0到59:
mysql>SELECTSECOND(’10:
05:
03′);
->3
PERIOD_ADD(P,N)
增加N个月到时期P(格式为YYMM或YYYYMM)中。
以YYYYMM格式返回值。
注意,期间参数P不是一个日期值:
mysql>SELECTPERIOD_ADD(9801,2);
->199803
PERIOD_DIFF(P1,P2)
返回时期P1和P2之间的月数。
P1和P2应该以YYMM或YYYYMM指定。
注意,时期参数P1和P2不是日期值:
mysql>SELECTPERIOD_DIFF(9802,199703);
->11
DATE_ADD(date,INTERVALexprtype)
DATE_SUB(date,INTERVALexprtype)
ADDDATE(date,INTERVALexprtype)
SUBDATE(date,INTERVALexprtype)
这些函数执行日期的算术运算。
ADDDATE和SUBDATE分别是DATE_ADD和DATE_SUB的同义词。
在MySQL3.23中,如果表达式的右边是一个日期值或一个日期时间型字段,你可以使用+和–代替DATE_ADD和DATE_SUB(示例如下)。
参数date是一个DATETIME或DATE值,指定一个日期的开始。
expr是一个表达式,指定从开始日期上增加还是减去间隔值。
expr是一个字符串;它可以以一个“-”领头表示一个负的间隔值。
type是一个关键词,它标志着表达式以何格式被解释。
下表显示type和expr参数是如何关联的:
type值expr期望的格式
SECONDSECONDS
MINUTEMINUTES
HOURHOURS
DAYDAYS
MONTHMONTHS
YEARYEARS
MINUTE_SECOND“MINUTES:
SECONDS”
HOUR_MINUTE“HOURS:
MINUTES”
DAY_HOUR“DAYSHOURS”
YEAR_MONTH“YEARS-MONTHS”
HOUR_SECOND“HOURS:
MINUTES:
SECONDS”
DAY_MINUTE“DAYSHOURS:
MINUTES”
DAY_SECOND“DAYSHOURS:
MINUTES:
SECONDS”
在expr的格式中,MySQL允许任何字符作为定界符。
表中所显示的是建议的定界字符。
如果date参数是一个DATE值,并且计算的间隔仅仅有YEAR、MONTH和DAY部分(没有时间部分),那么返回值也是一个DATE值。
否则返回值是一个DATETIME值:
mysql>SELECT“1997-12-3123:
59:
59″+INTERVAL1SECOND;
->1998-01-0100:
00:
00
mysql>SELECTINTERVAL1DAY+“1997-12-31″;
->1998-01-01
mysql>SELECT“1998-01-01″–INTERVAL1SECOND;
->1997-12-3123:
59:
59
mysql>SELECTDATE_ADD(”1997-12-3123:
59:
59″,
说明:
以下所有问题均假设已经初始登录到MySQL客户端,系统所有数据库命名方式可以采用中文,题目之间前后有相应的顺序,确保命名方式一致,根据问题的描述,写出相应的MySQL语句。
一、数据库设计
1.显示当前系统所有数据库,将MySQL设置为默认数据库,并显示MySQL数据库中的所有表
Showdatabases;
Usemysql;
Showtables;
2.创建数据库【选课】,设置数据库的编码字符集为UTF8,并将【选课】设置为默认数据库
Createdatabase选课
CharactersetUTF8;
Use选课;
3.系统包含以下实体,请创建相应的表,字段描述中并未给出相应的主键和相应的外键关联,请自行设计每个实体的主键和相应的外键关联字段。
提示:
【学院】【学生】之间存在一对多的关系
【学生】【课程】之间存在多对多关系,
它们之间的联系为【选课】。
【学生】,应包含【学号、姓名、出生日期】等属性。
【学院】,应包含【学院名称】等属性。
【课程】,应包含【课程名称,课程学分】等属性。
【选课】,应包含【成绩】等属性。
CREATETABLE学院
(学院名称varCHAR(20)primarykey);
CREATETABLE学生
(学号CHAR(10)primarykey,
姓名VARCHAR(10),
出生日期DATE,
学院名称VARCHAR(20)
ForeignKey(学院名称)references学院(学院名称));
CREATETABLE课程
(课程名称varCHAR(20)primarykey,
课程学分int);
CREATETABLE选课
(课程名称varCHAR(20),
学号CHAR(10),
成绩float,
primarykey(课程名称,学号),
ForeignKey(课程名称)references课程(课程名称),
ForeignKey(学号)references学生(学号));
二、数据库功能
1.设计【选课视图】,要求显示【学生姓名,课程名称,课程学分,成绩】字段
Createviewv_1(学生姓名,课程名称,课程学分,成绩)
As
Select学生姓名,课程名称,课程学分,成绩
From学生,课程,选课
Where学生.学号=选课.学号and课程.课程名称=选课.课程名称
2.设计触发器,当删除【课程】时,相应的触发器触发,从【选课】实体中删除相应的【选课】记录
Createtriggert_1afteron课程
Foreachrow
Beginmysql试题及答案。
Deletefrom选课where课程名称=old.课程名称;mysql试题及答案。
end
3.设计一个函数,根据相应的【学院】返回学生的平均成绩
CREATEFUNCTIONT23(XYVARCHAR(20))
RETURNSFLOAT
BEGINmysql试题及答案。
DECLARECJFLOAT;
SELECTAVG(成绩)INTOCJFROM选课,学生
WHERE选课.学号=学生.学号and学院名称=XY;
RETURN(CJ);
END
4.设计一个存储过程,根据【学号】返回学生的学分,注意,成绩在60分以上才能
获得相应的学分。
CREATEPROCEDURET24(INXHCHAR(10),OUTXFINT)
BEGIN
SELECTSUM(课程学分)INTOXFFROM选课,课程
WHERE选课.课程名称=课程.课程名称AND学号=XH
AND成绩>=60;
END
三、数据库查询与管理
1、查询没有选过任何课程的学生
SELECT*FROM学生WHERE学号NOTIN(SELECTDISTINCT学号FROM选课);
2、按照某一课程的成绩高低显示学生名单
SELECT*FROM学生,选课where学生.学号=选课.学号
and课程名称=’XXX’
orderby成绩desc;
3、查询某个学生的平均成绩
Select学号,avg(成绩)from选课where学号=’XXX’;
4、创建test用户,并将【选课】数据库的所有权限赋予test用户,并设定test用户可以在任何主机上登录。
GRANTALLPRIVILEGESON选课.*TO‘test’@’%’IDENTIFIEDBY’something’;
5、数据库备份
MYSQLDUMP–UTEST-Psomething选课>xx.SQL
一、单选题(共34分)
1、mysql中唯一索引的关键字是(C)
(1分)
A.fulltextindex
B.onlyindex
C.uniqueindex
D.index
2、下面关于索引描述中错误的一项是(C)
A.索引可以提高数据查询的速度
(1分)
B.索引可以降低数据的插入速度
C.innodb存储引擎支持全文索引
D.删除索引的命令是dropindex
(2分)
3、支持主外键,索引及事务的存储引擎为是(B)
A.MYISAM
B.INNODB
C.MEMORY
4、对事务的`描述中不正确的是(C)(2分)
A.事务具有原子性
B.事务具有隔离性
C.事务回滚使用commit命令
5、mysql中,备份数据库的命令是(A)
A.mysqldump
B.mysql
D.copy
C.backup
(2分)
6、实现批量数据导入的命令是(B)
A.mysqldump
B.mysql
C.backup
D.return
7、创建用户的命令是(
A.joinuser
(2分)
B.createuser
C.createroot
D.mysqluser
(2分)
8、修改自己的mysql服务器密码的命令是(C)
A.mysql
B.grant
C.setpassword
D.changepassword
9、找回mysql服务器root密码的很重要的一步是跳过权限表的检查启动mysql,该命令是(D)
(2分)
A.mysql-uroot–proot
B.mysqladmin-uroot-proot
C.netstartmysql
D.mysqld-nt--skip-grant-tables
10、联合查询使用的关键字是(B)
A.UNION
B.JOIN
(2分)
C.ALL
D.FULL
11、有订单表orders,包含用户信息userid,产品信息productid,以下(D)语句能够返回至少被订购过两回的productid?
(2分)
A.selectproductidfromorderswherecount(productid)>1
B.selectproductidfromorderswheremax(productid)>1
C.selectproductidfromorderswherehavingcount(productid)>1groupbyproductid
D.selectproductidfromordersgroupbyproductidhavingcount(productid)>1
12、子查询中可以使用运算符ANY,它表示的意思是(B)(2分)
A.满足所有的条件C.一个都不用满足
B.满足至少一个条件D.满足至少5个条件
13、一种存储引擎,其将数据存储在内存当中,数据的访问速度快,电脑关机后数据丢失,具有临时存储数据的特点,该存储引擎是(C)(2分)
A.MYISAMB.INNODBC.ROLLBACK(2分)D.return
14、事务中能实现回滚的命令是(B)
A.TRANSACTION
B.COMMIT
C.MEMORY
D.SAVEPOINT
15、mysql中,还原数据库的命令是(C)
A.mysqldump
B.mysql
C.backup
(2分)
16、ysql中存储用户全局权限的表是(D)
A.table_priv
B.procs_priv
(2分)
C.columns_priv
D.user
17、删除用户的命令是(A)
A.dropuserB.userC.droprootD.truncateuser
18、给名字是zhangsan的用户分配对数据库studb中的stuinfo表的查询和插入数据权限的语句是(B)(2分)
A.grantselect,onstudb.stuinfofor‘zhangsan’@’localhost’B.grantselect,onstudb.stuinfoto‘zhangsan’@’localhost’
C.grant‘zhangsan’@’localhost’toselect,forstudb.stuinfo
D.grant‘zhangsan’@’localhost’tostudb.stuinfoonselect,
二、多项选择题(共12分)
20、事务具有下面的特性(ABC)(4分)
A稳定性B原子性C隔离性D再生性
21、下列的函数中可以处理日期和时间的函数有(BCD)(4分)
AroundBWeekDayCCurdateDDayofMonth
22、mysql中的约束有(BCD)
A.检查约束
B.默认约束(4分)
C.非空约束
D.唯一约束
三、简答题(共12分)
24、在mysql中常用存储引擎有哪几种(最少三种),每个引擎特点区别?
(6分)
25忘记MySQL管理员root的密码如何解决?
写出步骤和指令(6分)
四、编程题(共42分)
1.有一个关于商品供应及顾客订单的数据库。
其中包括四个表,表中信息如下:
供应表apply(id、name、sid、price)
说明:
id供应厂家编号name供应厂家名称sid商品编号price商品价格
顾客表customers(gid、name、address、balance)说明:
gid顾客编号address地址balance余额
订单表orders(sid、gid、date)
说明:
sid商品编号gid顾客编号date订单日期
商品表goods(sid、name、count)
说明:
sid商品编号name商品名称count商品数量1)分析各个表之间的关系(主外键引用关系),创建四个表(4分)
2)从供应表中查询全体供应厂商的基本信息(3分)
3)从顾客表中查询地址在长春的顾客的顾客编号、顾客姓名及余额(3分)
4)从商品表中查询以?
可乐?
两个字结尾的商品名称及数量,并按数量降序排序(4分)
5)从订单表中查询购买商品编号为?
101?
商品的顾客编号及订单日期(3分)
6)从商品表中查询最多商品数量、最少商品数量及商品总数量的记录信息(4分)
7)查询出2008-8-8顾客的订单信息,要求包括顾客姓名、商品名称及订单日期(4分)
8)向商品表中追加一条纪录?
204?
?
可口可乐?
?
900?
)(3分)
9)将商品表中商品编号为204的商品名称更改为?
百事可乐?
(3分)
10)将顾客表上余额不足1000元的,将其订单日期延后10天(4分)
11)删除订单表中商品编号为?
102?
的订单记录(3分)
12)将商品表中没有顾客订购的商品信息删除(4分)
一、选择题
1.在MySQL中,通常使用________语句来进行数据的检索、输出操作。
A.SELECT
B.INSERT
C.DELETE
D.UPDATE
2.在SELECT语句中,可以使用________子句,将结果集中的数据行根据选择列的值进行逻辑分组,以便能汇总表内容的子集,即实现对每个组的聚集计算。
A.LIMIT
B.GROUPBY
C.WHERE
D.ORDERBY
二、填空题
1.SELECT语句的执行过程是从数据库中选取匹配的特定________和________,并将这些数据组织成一个结果集,然后以一张________的形式返回。
2016年计算机二级MySQL数据库试题及答案2016年计算机二级MySQL数据库试题及答案。
2.当使用SELECT语句返回的结果集中行数很多时,为了便于用户对结果数据的浏览和操作,可以使用子句来限制被SELECT语句返回的行数。
三、编程题
请使用SELECT语句将数据库db_test的表content中留言人姓名为“MySQL初学者”的所有留言信息检索出来。
四、简答题
1.请简述什么是子查询?
2.请简述UNION语句的作用。
一、选择题
1.A2.B
二、填空题
1.行列临时表2.LIMIT
三、编程题
在MySQL命令行客户端输入如下SQL语句即可实现:
mysql>USEdb—test;
Databasechanged
mysql>SELECT*FROMcontent
一>WHEREusername=’MySQL初学者’;
四、简答题
1.略。
可参考第5章5.4节内容。
2.略。
2016年计算机二级MySQL数据库试题及答案计算机等级考试题库。
可参考第5章5.9节内容。