说明:以下所有问题均假设已经初始登录到MySQL客户端,系统所有数据库命名方式可以采用中文,题目之间前后有相应的顺序,确保命名方式一致,根据问题的描述,写出相应的MySQL语句。
一、 数据库设计
1. 显示当前系统所有数据库,将MySQL设置为默认数据库,并显示MySQL数据库中的所有表
Show databases;
Use mysql;
Show tables;
2. 创建数据库【选课】,设置数据库的编码字符集为UTF8,并将【选课】设置为默认数据库
Create database选课
Character set UTF8;
Use选课;
3. 系统包含以下实体,请创建相应的表,字段描述中并未给出相应的主键和相应的外键关联,请自行设计每个实体的主键和相应的外键关联字段。
提示:【学院】【学生】之间存在一对多的关系
【学生】【课程】之间存在多对多关系,
它们之间的联系为【选课】。
【学生】,应包含【学号、姓名、出生日期】等属性。
【学院】,应包含【学院名称】等属性。
【课程】,应包含【课程名称,课程学分】等属性。
【选课】,应包含【成绩】等属性。
CREATE TABLE 学院
(学院名称 varCHAR(20) primary key);
CREATE TABLE 学生
(学号 CHAR(10) primary key,
姓名 VARCHAR(10),
出生日期 DATE,
学院名称VARCHAR(20)
Foreign Key (学院名称) references 学院(学院名称));
CREATE TABLE 课程
(课程名称 varCHAR(20) primary key,
课程学分 int);
1
CREATE TABLE 选课
(课程名称 varCHAR(20),
学号 CHAR(10),
成绩 float,
primary key (课程名称,学号),
Foreign Key(课程名称) references 课程(课程名称),
Foreign Key(学号) references 学生(学号));
二、 数据库功能
1. 设计【选课视图】,要求显示【学生姓名,课程名称,课程学分,成绩】字段
Create view v_1 (学生姓名,课程名称,课程学分,成绩)
As
Select学生姓名,课程名称,课程学分,成绩
From 学生,课程,选课
Where 学生.学号=选课.学号 and 课程.课程名称=选课.课程名称
2. 设计触发器,当删除【课程】时,相应的触发器触发,从【选课】实体中删除相应
的【选课】记录
Create trigger t_1 after delete on 课程
For each row
Begin
Delete from 选课 where 课程名称=old.课程名称;
end
3. 设计一个函数,根据相应的【学院】返回学生的平均成绩
CREATE FUNCTION T23(XY VARCHAR(20) )
RETURNS FLOAT
BEGIN
DECLARE CJ FLOAT;
SELECT AVG(成绩) INTO CJ FROM 选课,学生
WHERE 选课.学号=学生.学号 and学院名称=XY;
RETURN(CJ);
END
4. 设计一个存储过程,根据【学号】返回学生的学分,注意,成绩在60分以上才能
获得相应的学分。
CREATE PROCEDURE T24(IN XH CHAR(10),OUT XF INT)
BEGIN
SELECT SUM(课程学分) INTO XF FROM 选课,课程
WHERE 选课.课程名称=课程.课程名称 AND 学号=XH
AND 成绩>=60;
END
2
三、 数据库查询与管理
1、 查询没有选过任何课程的学生
SELECT * FROM 学生 WHERE 学号 NOT IN(SELECT DISTINCT 学号 FROM 选课);
2、 按照某一课程的成绩高低显示学生名单
SELECT * FROM 学生,选课 where 学生.学号=选课.学号
and 课程名称=’XXX’
order by 成绩 desc;
3、 查询某个学生的平均成绩
Select学号,avg(成绩) from 选课 where 学号=’XXX’;
4、 创建test用户,并将【选课】数据库的所有权限赋予test用户,并设定test用户可以在任何主机上登录。
GRANT ALL PRIVILEGES ON选课.* TO ‘test’@’%’ IDENTIFIED BY ’something’ ;
5、数据库备份
MYSQLDUMP –UTEST -P something 选课>xx.SQL
3
第二篇:数据库复习题及答案
1.保证数据库逻辑数据独立性的是( )。
A.模式 B.模式与内模式的映射 C.模式与外模式的映射 D.内模式
2. 设关系R和S各有100个元组,那么这两个关系的笛卡尔积运算结果的元组个数为( )
A.100 B.200 C.10000 D.不确定(与计算结果有关)
3. 一般不适合创建索引的属性有( )。
A.主键码和外键码。 B.可以从索引直接得到查询结果的属性。 C.对于范围查询中使用的属性。 D.经常更新的属性。
4. 为保护数据库中的信息,防止未经授权或非法的使用所造成的数据泄漏,更改或破坏,称为数据库的( )。
A.安全性 B.完整性 C.恢复 D.并发控制
5.有如下关系:教师(编号,姓名,性别,职称),将属性“性别”的取值范围定义为(男,女)符合( )定义 。
A.实体完整性 B.参照完整性 C.用户定义的完整性 D.逻辑完整性
6. 如何构造出一个合适的数据逻辑结构是( )主要解决的问题。
A.关系数据库优化 B.数据字典 C.关系数据库规范化理论 D.关系数据库查询
7. 设计数据流程图(DFD)属于数据库设计的( )阶段任务。
A.逻辑设计 B.概念设计 C.物理设计 D.需求分析
8.SQL和宿主语言的接口是( )。
A.DBMS B.OS C.DML D.主变量
9.关系代数表达式的优化策略中,首先要做的是( )
A.对文件进行预处理 B.尽早执行选择运算 C.执行笛卡儿积运算 D.投影运算
10.DBMS的并发控制子系统,保证了事务( )的实现
A.原子性 B.一致性 C.隔离性 D.持久性
11.对数据库并发操作有可能带来的问题包括( )
A.读出“脏数据” B.带来数据的冗余 C.未被授权的用户非法存取数据 D.破坏数据独立性
12.关系数据模型的三个组成部分中,不包括( )
A.完整性规则 B.数据结构 C.数据操作 D.并发控制
13.当关系R和S自然联接时,能够把R和S原来该舍弃的元组放到结果关系中的操作是( )
A.左外联接 B.右外联接 C.外部并 D.外联接
14.设有关系R(A,B,C)的值如下:
A B C
2 2 3
2 3 4
3 3 5
下列叙述正确的是( )
A.函数依赖A→B在上述关系中成立 B.函数依赖BC→A在上述关系中成立
C.函数依赖B→A在上述关系中成立 D.函数依赖A→BC在上述关系中成立
15.在视图上不能完成的操作是( )。
A.在视图上定义新的视图 B.查询操作 C.更新视图 D.在视图上定义新的基本表
16.下列四项中,不属于数据库特点的是( )。
A.数据共享 B.数据完整性 C.数据冗余很高 D.数据独立性高
17.一台机器可以加工多种零件,每一种零件可以在多台机器上加工,机器和零件之间为( )的联系。
A.1对1 B.1对多 C.多对多 D.多对1
18.在SQL中, SELECT语句的 “SELECT DISTINCT”表示查询结果中( )。
A.属性名都不相同 B.去掉了重复的列 C.行都不相同 D.属性值都不相同
19.当关系R和S自然联接时,能够把S中原来该舍弃的元组放到结果关系中的操作是
A.左外联接 B.右外联接 C.外部并 D.
20.SELECT语句中,与关系代数中π运算符对应的是( )子句。
A.SELECT B.FORM C.WHERE D
21.视图是由下面哪两者导出的表( )。
A.模式、关系 B.基本表、视图 C.基本关系、关系 D
模式
22.下面哪种不属于数据库安全技术( )?
A.存取控制 B.视图 C.镜像 D
23.设属性A是关系R的主属性,则属性A不能取空值(NULL)。这是( )。
A.实体完整性规则 B.参照完整性规则 C.用户定义完整性规则
24.下述哪一条不是由于关系模式设计不当而引起的?( )。
A.数据冗余 B.丢失修改 C.插入异常 D
25.在R(C,S,Z)中,有F={(C,S)→Z,Z→C},则R能达到( )。
A. 1NF B. 2NF C. 3NF D. BCNF
26.在数据库设计中,将ER图转换成关系数据模型的过程属于( )。
A.需求分析阶段 B.逻辑设计阶段 C.概念设计阶段
段 )。 外联接 .GROUP BY .内模式、外.审计 D.域完整性规则 .更新异常 物理设计阶 ( D.
27.查询优化策略中,正确的策略是( )。
A.尽可能早地执行笛卡尔积操作 B.尽可能早地执行并操作 C.尽可能早地执行差操作 D.尽可能早地执行选择操作
28.事务的四个特性含( )。
A.串行性 B.一致性 C.开放性 D.封锁性
29.并发操作带来的数据不一致性不包括( )。
A.读到不正确的数据 B.不可重复读 C.破坏数据库安全性 D.丢失修改
30.设有关系R(A,B,C)和S(C,D)。与SQL语句select A,B,D from R,S where R.C=S.C等价的关系代数表达式是( )。
A.σR.C=S.C(πA,B,D(R×S)) B.πA,B,D(σR,C= S.C(R×S)) C.σR.C=S.C(πA,B (R)×πD(S))
D.σR,C=S.C(πD(πA,B(R)×S))
简答题:
1.什么是数据模型?要满足哪三方面要求?常用的分哪几类?
答:数据模型:对现实世界中数据特征的模拟和抽象。
(1)比较真实的模拟现实世界
(2)容易为人所理解
(3)便于在计算机上实现。
分类:概念模型(或信息模型),数据模型(网状,层次,关系)
2.简述视图的作用。
答:(1)视图能够简化用户操作
(2)使用户能以多种角度看待同一数据
(3)对重构数据库提供了一定程度的逻辑独立性
(4)能够对机密数据提供安全性保护
(5)可以清晰的表达查询
3.试写出3NF的定义。当一个关系模式满足2NF而不满足3NF时,会出现什么问题?请举例说明。
答:如果关系模式R是1NF,并且R中每一个非主属性对于R的候选键不存在部分依赖和传递依赖,那么称R属于3NF。
当一个模式满足2NF而不满足3NF模式时,那么会存在非主属性对候选键的传递依赖,在关系中会存在数据冗余,会引起操作异常。
举例:
4.简述数据库的三级模式结构中各级模式及其定义。
答:
数据库系统的三级模式结构:是指数据库系统是由外模式、模式和内模式三级构成。
(1)模式是数据库中全体数据的逻辑结构和特征描述,是所有用户的公共数据视图。与所使用的开发工具和设计语言无关。
(2)外模式是数据库用户能够看见和使用的局部数据的结构和特征描述,是数据库用户的数据视图。外模式是保证数据库安全性的一个有力措施。
(3)内模式是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。
5.什么是嵌入式SQL?为什么要使用嵌入式SQL?
答:
把SQL语句嵌入到高级语言中使用,称为嵌入式SQL。
SQL语言是面向集合的语言,是非过程的。而许多事务处理应用都是过程性的,需要根据不同的条件来执行不同的任务,因此单纯的用SQL语言很难实现这类应用。将SQL嵌入到高级语言中,利用高级语言的过程性结构来弥补SQL的不足。
6.(1)什么是数据库的存取控制机制?(2)该机制如何工作?(3)完成该机制的SQL命令是什么? 答:
(1)根据预先定义好的用户权限来进行存取控制,保证用户只能存取他有权限存取的数据。
(2)包括两部分:定义用户权限,合法权限检查
定义经过编译后存储在数据字典中。每当用户发出存取数据的操作请求后,DBMS就会查找数据字典,根据数据字典中的用户权限进行合法权检查。如果用户的操作请求超出了定义的权限,系统就会拒绝执行此操作。
(3)SQL:GRANT,REVOKE
计算题
1.设有关系R和S:
R A B C S A B D
1 2 3 1 3 6
1 3 5 3 6 8
2 4 6 1 3 5
3 6 9 3 4 5
计算(1)R?S(2)R?S(其中2>2表示R.B>S.B)。 2>2 答:
(1)R?S(2)R?S(其中2>2表示R.B>S.B)。
R?S A B C D R?S R.A R.B C S.A S.B D
1 3 5 6 2 4 6 1 3 6
1 3 5 5 2 4 6 1 3 5
3 6 9 8 3 6 9 1 3 6
3 6 9 1 3 5
3 6 9 3 4 5
2
.设有关系R和S:
R A B S A B 1 2 1 1 3 3 2 4 1 3 6 3 计算(1)R∪S(2)R∩S。 答:
(1)R∪S:(2)R∩S
3 6 2 4
3.已知:
–
答:
(2)R x S S
4.已知:
R:
S:
求:(1)R∞S(2)R中A列各个值的象集。 答:
a1的象集为{3,6}
a2的象集为{1,2}
综合题
1.设计一个适合大学选课的数据库。该数据库应包括学生、教师、课程,学生选课,教师教课,学生选课后有成绩。一名学生可选多门课,一门课可以被多名学生选,一名教师可以教若干门课,一门课可以被多名教师讲。 (1)用ER图描述该数据库;(
2)将ER图转换成关系,指出关系表的主外键。
答:(1)
(2)学生(学号,姓名,所在系);课程(课号,课名);教师(教师号,姓名);
选课(学号,课号,成绩);讲授(教师号,课号)
2.需要对生产厂家、产品及客户进行管理。其中生产厂家的信息包括厂名,地址,电话;产品的信息包括商标,模型和价格;顾客的信息包括姓名、地址、电话、身份证号等等。每个厂家生产若干种产品,每种产品可以被不同的厂家生产,顾客可以购买多种产品,同一产品可以卖给不同的客户。 要求:(1)用ER图描述该数据库;
(2)将ER图转换成关系,指出关系的主外键。 答:(1)
(2)厂家(厂家代号,名称,地址,电话);产品(产品代号,商标,模型,价格); 客户(姓名,身份证,地址,电话)
3.设有一个记录各个球队队员每场比赛进球数的关系模式
R(队员编号,比赛场次,进球数,球队名,队长名)如果规定每个队员只能属于一个球队,每个球队只有一个队长。
(1)试写出关系模式R的函数依赖和码。
(2)判断R是否属于2NF,并给出理由,如果不是,把R分解成属于2NF的模式;指出每个关系的码。 (3)进而把R分解成属于3NF的模式,并说明理由。
答:⑴
因为每个队员只能属于一个球队,所以有:队员编号?球队名;
因为每个球队只有一个队长,所以有:球队名?队长名;
因为每个队员每场比赛只有一个进球数,所以有:(队员编号,比赛场次)?进球数。
所以得到R的码为(队员编号,比赛场次)
⑵
从⑴可知:(队员编号,比赛场次)?(球队名,队长名),队员编号 ?(球队名,队长名)
所以存在部分函数依赖,因此R不是2NF模式。
对R应该进行分解:
R1(队员编号,球队名,队长名);
R2(队员编号,比赛场次,进球数)。
R1和R2都是属于2NF的模式。因为不存在非主属性对码的部分依赖。
⑶R2(队员编号,比赛场次,进球数)中,(队员编号,比赛场次)?进球数,关键码为(队员编号,比赛场次),可见R2已是3NF模式。
R1(队员编号,球队名,队长名)中,
队员编号?球队名,球队名?队长名(因为存在不同球队队长同名情况,所以队长名?球队名不成立) 关键码为队员编号,可见存在传递依赖,因此R1不是3NF模式。
对R1应分解成两个模式:R11(队员编号,球队名),R12(球队名,队长名)。这两个模式都是属于3NF的模式。
4.设某商业集团关于商店销售商品的数据库中有三个基本表:
商店SHOP(S#,SNAME,AREA,MGR_NAME)即:商店编号,店名,区域,经理姓名;
销售SALE(S#,G#, QUANTITY)即:商店编号,商品编号,销售数量; 商品GOODS(G#,GNAME,PRICE)即:商品编号,商品名称,单价。
(1)写SQL语句,检索销售“冰箱”的商店的编号和商店名称。
答:
SELECT A.S#,SNAME
FROM SHOP A,SALE B,GOODS C
WHERE A.S#=B.S# AND B.G#=C.G# AND GNAME='冰箱';
(2)写SQL语句,从SALE表中,把“开开商店”中销售单价高于1000元的商品的销售元组全部删除。 答:
DELETE FROM SALE
WHERE S# IN(SELECT S# FROM SHOP WHERE SNAME='开开商店') AND G# IN(SELECT G# FROM GOODS WHERE PRICE>1000);
(3)创建名为view1的视图,视图中要包括商店、商品及销售的全部记录。
答:
CREATE VIEW view1
AS SELECT * FROM SHOP,SALE,GOODS WHERE SHOP.S#=SALE.S# AND SALE.G#=GOODS.G#
(4)查询视图。在所创建的视图中查询开开商店的全部销售记录。
答:
SELECT * FROM view1 WHERE SNAME='开开商店'
(5)统计“区域”为“EAST”的所有商店销售的每一种商品的总数量和总价值。
答:
要求显示(G#,GNAME,SUM_QUANTITY,SUM_VALUE),即:商品编号、商品名称、销售数量、销售价值。
SELECT C.G#,GNAME,SUM(QUANTITY),PRICE*SUM(QUANTITY)
FROM SHOP A,SALE B,GOODS C
WHERE A.S#=B.S# AND B.G#=C.G# AND AREA='EAST'
GROUP BY C.G#,GNAME;(SELECT子句中的属性C.G#,GNAME应在分组子句中出现)
5.设数据库中有两个基本表:
职工表 EMP(E#,ENAME,AGE,SALARY,D#)即:职工工号、姓名、年龄、工资和工作部门的编号。 部门表 DEPT(D#,DNAME,MGR#)即:其属性分别表示部门编号、部门名称和部门经理的职工工号。
(1)试指出每个表的主键和外键。并写出职工表创建语句中的外键子句,部门表创建主键的子句。
答:
EMP表的主键为E#,外键为D#。 DEPT表的主键为D#,外键为MGR#
在EMP表的创建语句中: FOREIGN KEY D# REFERENCES DEPT(D#); 在DEPT表的创建语句中: PRIMARY KEY (D#);
(2)写出下列查询的关系代数表达式和SQL语句:
?检索每个部门经理的工资,要求显示其部门编号、部门名称、经理工号、经理姓名和经理工资。
答:
关系表达式为:πDEPT.D#,DNAME,MGR#,ENAME,SALARY(DEPT ? EMP)
SELECT语句为:
SELECT DEPT.D#,DNAME,MGR#,ENAME,SALARY
FROM DEPT,EMP WHERE DEPT.MGR#= EMP.E#;
?查询工资大于2000,年龄小于30岁的职工的编号,姓名,年龄和工资。
答:
关系表达式为:πE#,ENAME,AGE,SALARY(σSALARY >2000∧ AGE<30(EMP) SELECT E#,ENAME,AGE,SALARY FROM EMP WHERE SALARY>2000 AND AGE<30
(3)建一个年龄大于50岁的职工视图,视图的名为view1,视图中包含属性(D#,DNAME,E#,ENAME,AGE,SALARY)。 答:
CREATE VIEW view1 AS SELECT DEPT.D#,DNAME,E#,ENAME,AGE,SALARY
FROM DEPT,EMP WHERE DEPT.D#=EMP.D# AND AGE>50;
(4)创建一个名为procE的存储过程,功能是查询所有部门为“后勤”的职工信息。 答:
CREATE PROCEDURE procE AS SELECT * FROM EMP,DEPT WHERE EMP.D#=DEPT.D# AND DNAME=’后勤’
(5)在表EMP上创建一个triggerE触发器,当执行DELETE操作该触发器被触发。 答:
CREATE TRIGGER triggerE ON EMP FOR DELETE