搜索
您的当前位置:首页正文

《数据库原理及应用实验》

来源:二三娱乐


《数据库原理与应用实验》

实验报告册

学年 第 学期

学 院:

专 业:

年 级:

姓 名:

学 号:

任课教师:

MySQL+Navicat安装步骤与下载地址 百度地址: 配置与简单使用 百度地址:

本文档所书写的代码,为本人纯手工敲打,并且通过软件测试成功,欢迎大家进行学习,如有错误,可联系本人

2

实验一 创建和维护数据库

一、实验目的

(1)掌握在Windows 平台下安装与配置MySQL 的方法。 (2)掌握启动服务并登录MySQL 数据库的方法和步骤。 (3)掌握MySQL 数据库的相关概念。

(4)掌握使用Navicat 工具和SQL 语句创建数据库的方法。 (5)掌握使用Navicat 工具和SQL 语句删除数据库的方法。

二、实验要求

(1)学生提前准备好实验报告,预习并熟悉实验步骤;

(2)遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

(1)在Windows 平台下安装与配置MySQL 版。 (2)在服务对话框中,手动启动或者关闭MySQL 服务。 (3)使用Net 命令启动或关闭MySQL 服务。

(4)分别用Navicat 工具和命令行方式登录MySQL。

(5)在 文件中将数据库的存储位置改为D:\\MYSQL\\DATA。

(6)创建数据库。

① 使用Navicat 创建学生信息管理数据库gradem。 ② 使用SQL 语句创建数据库MyDB。

(7)删除数据库。

① 使用Navicat 图形工具删除gradem 数据库。 ② 使用SQL 语句删除MyDB 数据库。

四、思考题

3

常见的数据库产品有哪些

五、实验总结

1、收获

2、存在的问题

4

实验二 管理表

一、实验目的

(1) 掌握表的基础知识。

(2) 掌握使用Navicat管理工具和SQL语句创建表的方法。 (3) 掌握表的修改、查看、删除等基本操作方法。

二、实验要求

(1)学生提前准备好实验报告,预习并熟悉实验步骤;

(2)遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

(1)在gradem数据库中创建表~表所示结构的表。

表 student表的表结构 字段名称 sno 型 char varchar char datetime saddress sdept speciality r r char varcha0 varcha0 16 2数据类度 10 8 2 5长数 小数位是否允许NULL值 说明 否 主码 sname ssex sbirthday 是 是 是 是 是 是 表 course表(课程名称表)的表结构

字段名称 cno 数据类型 char varchar 度 5 长数 小数位值 否 是否允许NULL明 主码 说cname 20 否 表 sc表(成绩表)的表结构

5

字段名称 sno 数据类型 char 度 长小数位数 值 是否允许NULL说明 组合主码、外码 组合主码、外码 1~100 10 5 否 cno degree al char decim 否 4 1 是 表 teacher表(教师表)的表结构 字段名称 tno tname tsex tbirthday tdept 数据类型 char varchar char date char 度 3 8 2 16 长小数位数 值 否 是 是 是 是 是否允许NULL说明 主码 表 teaching表(授课表)的表结构

字段名称 cno 型 char 数据类度 5 长小数位数 是否允许NULL值 说明 组合主码、外码 组合主码、外码 1~10 否 tno char tinyint 3 否 cterm

1 0 是 (2) 向表至表输入数据记录,见表~表。

表 学生关系表student sno sname ssex 男 女 y 1987-01-12 1988-06-6

山东青岛 山东济南 sbirthdasaddress sdept speciality 李勇 刘晨 计算机工程系 信息工程系 计算机应用 电子商务 04 王敏 女 1989-12-23 1988-08-25 表 课程关系表course

cno C01 C02 cname 数据库 数学 cno C03 C04 表 成绩表sc

sno cno C01 C02 C03 C02 C03 表 教师表teacher

tno 101 tname 李新 tsex 男 tbirthday 1977-01-12 tdept 计算机工程系 计算机工程系 信息工程系 信息工程系 degree 92 85 88 90 80 cname 信息系统 操作系统 河北唐山 江苏苏州 数学系 数学 张立 男 信息工程系 电子商务 102 201 202 钱军 王小花 张小青 女 女 男 表 授课表teaching 1968-06-04 1979-12-23 1968-08-25 cno C01 C02 C03 C04

(3)在navicat下修改表结构。

tno 101 102 201 202 cterm 2 1 3 4 ① 向student表中增加“入学时间”列,其数据类型为日期时间型。 ② 将student表中的sdept字段长度改为20。 ③ 将student表中的speciality字段删除。

7

④ 删除student表。

(4) 利用SQL命令(create table、alter table、drop table)完成对表的操作 ①利用create talbe 命令完成student表和course表的定义。

②利用alter table、drop table命令实现(3)中的所有任务。

8

四、思考题

(1) 在定义基本表语句时,NOT NULL参数的作用是什么

(2) 主码可以建立在“值可以为NULL”的列上吗

五、实验总结:

1、收获

2、存在的问题

9

实验三 简单查询——单表无条件和有条件查询

一、实验目的

(1) 掌握SELECT语句的基本用法。 (2) 使用WHERE子句进行有条件的查询。

(3) 掌握使用IN和NOT IN,BETWEEN…AND和NOT BETWEEN…AND来缩小查询范围的方法。 (4) 利用LIKE子句实现字符串匹配查询。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

在上次实验建立的Gradem或Gradem1数据库中完成下面查询:

(1) 查询所有学生的基本信息、所有课程的基本信息和所有学生的成绩信息(用三条SQL语句)。 SELECT * FROM student; SELECT * FROM course; SELECT * FROM sc;

(2) 查询所有学生的学号、姓名、性别和出生日期。 SELECT sno,sname,ssex,sbirthday FROM student;

(3) 查询所有课程的课程名称。 SELECT cname FROM course

(4) 查询前10门课程的课号及课程名称。 SELECT cno,cname FROM course WHERE cno<=10

10

(5) 查询所有学生的姓名及年龄。

SELECT sname ,year(now())-year(sbirthday) FROM student;

(6) 查询所有年龄大于18岁的女生的学号和姓名。 SELECT sno,sname FROM student

WHERE ssex='女'and year(now())-year(sbirthday)>18

(7) 查询所有男生的信息。 SELECT *

FROM student,teacher

WHERE ssex='男'and tsex='男'

(8) 查询所有任课教师的姓名(Tname)和所在系别(Tdept)。 SELECT tname,tdept FROM teacher

(9) 查询“电子商务”专业的学生姓名、性别和出生日期。 SELECT sname,ssex,sbirthday FROM student

WHERE sdept='电子商务'

(10) 查询Student表中的所有系名。 SELECT sdept FROM student

(11) 查询“C01”课程的开课学期。 SELECT cterm FROM teaching WHERE cno='c01'

(12) 查询成绩在80~90分之间的学生学号及课号。 SELECT sno,cno FROM sc

WHERE degree BETWEEN 80 and 90

11

(13) 查询在1970年1月1日之前出生的男教师信息。 SELECT * FROM teacher

WHERE tbirthday<'1970-01-01'and tsex=’男’;

(14) 输出有成绩的学生学号。 SELECT sno FROM sc

WHERE degree is NOT NULL;

(15) 查询所有姓“刘”的学生信息。 SELECT * FROM student

WHERE sname LIKE'刘%'

(16) 查询生源地不是山东省的学生信息。 SELECT * FROM student

WHERE saddress NOT LIKE'山东%'

(17) 查询成绩为79分、89分或99分的记录。 SELECT * FROM sc

WHERE degree='79' or degree='89' or degree='99'

(18) 查询名字中第二个字是“小”字的男生的学生姓名和地址。 SELECT sname,saddress FROM student

WHERE ssex='男' and sname LIKE'_小' (19) 查询名称以“计算机_”开头的课程名称。 SELECT cname FROM course

WHERE cname LIKE'计算机_'

(20) 查询计算机工程系和软件工程系的学生信息。 SELECT *

12

FROM student

WHERE sdept='计算机工程系' OR sdept='软件工程系'

四、思考题

1、LIKE的通配符有哪些分别代表什么含义 通配符 含义

% 有零个或更多个字符组成的任意字符串 _ 任意单个字符

[ ] 用于指定范围,例如[A ~ F],表示A ~ F范围内的任何单个字符

[ ^ ] 表示指定范围之外的,例如[ ^A ~ F ],表示A ~ F 范围以外的任何单个字符。 2、知道学生的出生日期,如何求出其年龄 SELECT year(now())-year(sbirthday) FROM student;

3、IS能用“=”来代替吗

不能

is是用来判断null的,比如 remark is null 或者remark is not null =是用来直接比较值的。

4、关键字ALL和DISTINCT有什么不同的含义

ALL表示所有的字段,有重复的2条,2 条都显示, DISTINCT表示如果有重复的,只取一条。 五、实验总结:

1、收获

经过这节数据库课程的学习,我基本上掌握了创建数据库以及对数据库的操作的基础知识。学习了SQL数据库中的增、删、改、查等功能,数据库这门课涉及到以前的知识不多,是一门从头学起的课程,即使基础不是很好,只要认真听讲、复习功课,还是一门比较容易掌握的课。

2、存在的问题

不够熟悉对数据库系统的操作,不会运用快捷键,需要更多的练习和操作。

实验四 简单查询——分组与排序

一、实验目的:

(1) 利用GROUP BY子句对查询结果分组。

13

(2) 利用ORDER BY子句对查询结果排序。 (3) 掌握聚集函数的使用方法。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

在Gradem或Gradem1数据库中完成下面查询: (1) 统计有学生选修的课程的门数。 SELECT COUNT(DISTINCT cno) FROM course

(2) 计算“c01”课程的平均成绩。 SELECT AVG(degree) FROM sc

WHERE cno='c01';

(3) 查询选修了“c03”课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT sno,degree FROM sc

WHERE cno='c03' ORDER BY degree DESC;

(4) 查询各个课程号及相应的选课人数。 SELECT cno,COUNT(sno) FROM sc GROUP BY cno

(5) 统计每门课程的选课人数和最高分。 SELECT COUNT(sno),MAX(degree) FROM sc GROUP BY cno

(6) 统计每个学生的选课门数和考试总成绩,并按选课门数降序排列。 SELECT COUNT(sno),sum(degree) FROM sc GROUP BY sno

ORDER BY COUNT(sno) DESC;

14

(7) 查询选修了3门以上课程的学生学号。 SELECT sno FROM sc GROUP BY sno HAVING COUNT(cno)>3

(8) 查询成绩不及格的学生学号及课号,并按成绩降序排列。 SELECT sno,cno FROM sc WHERE degree<60 ORDER BY degree DESC

(9) 查询至少选修一门课程的学生学号。 SELECT sno FROM sc GROUP BY sno HAVING COUNT(cno)>1

(10) 统计输出各系学生的人数 SELECT sdept ,COUNT(*) FROM student GROUP BY sdept

(11) 统计各系的男、女生人数。(两条命令)

Select sdept,ssex,count(*)

From student

15

Group by sdept ,ssex

(12) 统计籍贯的男、女生人数。(两条命令) Select saddress,ssex,count(*) From student

Group by saddress ,ssex

(13) 统计各系的老师人数,并按人数升序排序。 SELECT tdept ,COUNT(*) FROM teacher GROUP BY tdept ORDER BY COUNT(*) DESC

(14) 统计不及格人数超过10人的课程号。 SELECT cno FROM sc GROUP BY cno

HAVING COUNT(degree<60)>10

(15)统计选修人数超过10人的课程号。 SELECT cno FROM sc GROUP BY cno HAVING COUNT(*)>10

(16) 查询软件系的男生信息,查询结果按出生日期升序排序,出生日期相同的按地址降序排序。 SELECT * FROM student

WHERE ssex='男' and sdept='信息工程系' ORDER BY sbirthday,saddress DESC

16

四、思考题

(1) 聚集函数能否直接使用在SELECT子句、HAVING子句、WHERE子句、GROUP BY子句中 (2) WHERE子句与HAVING子句有何不同 五、实验总结:

1、收获 2、存在的问题

17

实验五 多表查询

一、实验目的

(1) 掌握SELECT语句在多表查询中的应用。 (2) 掌握多表连接的几种连接方式及应用。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤:

在Gradem或Gradem1数据库中完成下面查询:

(1) 查询计算机工程系女学生的学生学号、姓名及考试成绩。

SELECT ,sname, FROM student,sc

WHERE = and ='计算机工程系' and ='女';

(2) 查询“李勇”同学所选课程的成绩。(不考虑重名) SELECT FROM student,sc WHERE = and ='李勇'

(3) 查询“李新”老师所授课程的课程名称。 SELECT

FROM teacher,teaching,course WHERE = and = and ='李新'

(4) 查询女教师所授课程的课程号及课程名称。 SELECT ,

FROM teacher,teaching,course WHERE = and = and ='女'

(5) 查询至少选修一门课程的女学生姓名。 SELECT FROM student,sc WHERE = AND ='女' GROUP BY HAVING COUNT>1

18

(6) 查询姓“王”的学生所学的课程名称。 SELECT

FROM student,sc,course WHERE = AND = AND sname='王%'

(7) 查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩。 SELECT ,

FROM student,sc,course

WHERE = AND = AND cname='数据库' AND degree BETWEEN 80 AND 90

(8) 查询课程成绩及格的男同学的学生信息及课程号与成绩。

SELECT student.*,, FROM student,sc,course WHERE = AND =

AND degree>60 AND ssex='男'

(9) 查询选修“c04”课程的学生的平均年龄。 SELECT AVG(year(NOW())-YEAR(sbirthday)) FROM student,sc,course WHERE = AND = AND ='c04'

(10) 查询学习课程名为“数学”的学生学号和姓名。 SELECT ,sname FROM student,sc,course WHERE = AND = AND cname='数学'

19

(11) 查询“钱军”教师任课的课程号,选修其课程的学生的学号、姓名和成绩。 SELECT ,,sname,

FROM teacher,teaching,course,student,sc WHERE = and = and = and = and ='钱军'

(12) 查询在第3学期所开课程的课程名称及成绩。 SELECT ,

FROM course,sc,teaching WHERE = and = and cterm='3'

(13) 查询“c02”号课程不及格的学生信息。 SELECT student.* FROM student,sc

WHERE = and cno='c02' and degree<60 and degree IS NULL

(14) 查询软件系成绩在90分以上的学生姓名、性别和课程名称。 SELECT ,ssex, FROM student,sc,course

WHERE = and = and sdept='软件系' AND degree>90

20

(15) 查询同时选修了“c04”和“c02”课程的学生姓名和成绩。 SELECT ,

FROM student,sc,course

WHERE = and = and ='c04' AND ='c02'

四、思考题

(1) 指定一个较短的别名有什么好处 更容易辨识 方便查看

(2) 内连接与外连接有什么区别

内连接: 只有两个表相匹配的行才能在结果集中出现 外连接: 包括

左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制)

(3) “=”与IN在什么情况下作用相同 选值只有一个

五、实验总结

1、收获

经过近一个小时的调试,编写,最终得出结论,并进行书写。使我加深了对mysql进一步学习和认识,更加熟练了对软件的使用,收获颇丰。

2、存在的问题

对于语句的使用略显生疏,需要进一步的练习,加深认识。

21

实验六 嵌套查询

一、实验目的

(1) 掌握嵌套查询的使用方法。

(2) 掌握相关子查询与嵌套子查询的区别。 (3) 掌握带IN谓词的子查询的使用方法。 (4) 掌握带比较运算符的子查询的使用方法。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

在Grademanager数据库中完成下面查询:

(1) 查询计算机系(CS)学生的学生学号、姓名及考试成绩。 SELECT ,, FROM student,sc

WHERE = AND sdept='计算机系' ;

(2) 查询“李勇”同学所选课程的成绩。 SELECT FROM sc,student

WHERE = AND sname='李勇';

(3) 查询“李新”老师所授课程的课程名称。 SELECT

FROM course,teacher,teaching WHERE = AND = AND tname='李新';

(4) 查询女教师所授课程的课程号及课程名称。 SELECT ,

FROM teaching,teacher,course WHERE = AND = AND tsex='女';

22

(5) 查询姓“王”的学生所学的课程名称。 SELECT

FROM course,student,sc

WHERE = AND = AND sname LIKE '王%';

(6) 查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩。 SELECT , FROM course,sc

WHERE = AND ='数据库' AND degree BETWEEN 80 AND 90;

(7) 查询选修“C04”课程的学生的平均年龄。

SELECT AVG((YEAR(CURDATE())-YEAR)) AS 选修C04课程的学生平均年龄 FROM student,sc WHERE = AND ='c04'

(8) 查询学习课程名为“数学”的学生学号和姓名。 SELECT ,

FROM student,course,sc WHERE = AND = AND ='数学'

(9) 查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩。 SELECT cno,sno,degree FROM sc

WHERE cno in(SELECT cno FROM teaching,teacher WHERE = AND tname='钱军')

23

(10) 查询在第3学期所开课程的课程号及成绩。 SELECT cno,degree FROM sc

WHERE cno in(SELECT cno FROM teaching WHERE cterm='3')

(11) 查询与“李勇”同一个系的同学姓名。 SELECT sname from student

WHERE sdept in( SELECT sdept FROM student WHERE sname='李勇')

(12) 查询学号比“刘晨”同学大,而出生日期比他小的学生姓名。 SELECT sname from student

WHERE snoand year(sbirthday)>all (SELECT year(sbirthday) from student WHERE sname='刘晨')

(13) 查询出生日期大于所有女同学出生日期的男同学的姓名及系别。 select sname,sdept from student

where year(sbirthday)>all(select year(sbirthday)from student where ssex='女' ) and ssex='男'

(14) 查询成绩比该课程平均成绩高的学生的学号及成绩。 select sno,degree from sc

where degree >=(select avg(degree) from student,sc where =

(15) 查询不讲授“C01”课的教师姓名。 select tname

from teacher ,teaching

24

where = and cno !='c01'

(16) 查询没有选修“C02”课程的学生学号及姓名。 select ,sname from student,sc where = and cno!='C02'

(17) 查询选修了“数据库”课程的学生学号、姓名及系别。 select sname,,sdept from student,sc,course

where = and = and cname='数据库'

(18) 查询“C02”号课程不及格的学生信息。

select * from student,sc

where = and cno='c02' and degree<60

四、思考题

(1) 子查询一般分为几种 4种

(2) 相关子查询的执行过程是什么 依赖于父查询的查询

五、实验总结

1、收获

进一步的练习了嵌套查询和夺标连接,学到更多的知识,受益良多。

25

2、存在的问题

还是不够熟悉,需要进一步的学习和复习

实验七 数据更新

一、实验目的:

(1) 掌握利用INSERT命令实现对表数据的插入操作。 (2) 掌握利用UPDATE命令实现对表数据的修改操作。 (3) 掌握利用DELETE命令实现对表数据的删除操作。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

在Gradem或Gradem1数据库中完成下面操作:

注意:利用SELECT INTO…命令备份Student、SC、Course这3个表,备份表名自定。

(1) 向Student表中插入记录(\"\",\"张静\",\"1981-3-21\",\"女\",\"CS\",\"电子商务\")。 INSERT

INTO student(sno,sname,sbirthday,ssex,sdept,speciality) VALUES('','张静','1982-3-21','女','CS','电子商务');

(2) 插入学号为“”、姓名为“李四”的学生信息。 INSERT

INTO student(sno,sname) VALUES('','李四');

(3) 把计算机系的学生记录保存到表TS中(TS表已存在,表结构与Student表相同)。 INSERT INTO ts SELECT * FROM student WHERE sdept='计算机'

26

(4) 将学号为“”的学生姓名改为“张华”,系别改为“CS”,专业改为“多媒体技术”。 UPDATE student

SET sname='张华',sdept='cs',speciality='多媒体技术' WHERE sno='';

(5) 将“李勇”同学的专业改为“计算机信息管理”。

UPDATE student

SET speciality='计算机管理' WHERE sname='李勇';

(6) 把选修了“数据库”课程而成绩不及格的学生的成绩全改为空值(NULL)。 UPDATE SC SET degree='NULL' WHERE cno in(SELECT cno from course

WHERE cname='数据库') AND degree<60

(7) 删除学号为“”的学生记录。 DELETE FROM student WHERE sno=''

(8) 删除“计算机系”所有学生的选课记录。 DELETE FROM sc

WHERE sno in(SELECT sno from student

WHERE sdept='计算机系')

(9) 删除SC表中尚无成绩的选课记录。 DELETE FROM sc

WHERE degree='NULL'

(10) 把“张晨”同学的成绩记录全部删除。 DELETE

27

FROM sc

WHERE sno in(SELECT sno FROM student WHERE sname='张晨')

四、思考题

(1) DROP命令和DELETE命令的本质区别是什么 DROP删除整个表,表结构和数据 DELETE删除表的某一行,不删除表结构

(2) 利用INSERT、UPDATE和DELETE命令可以同时对多个表进行操作吗 不能,只能单个表

五、实验总结:

1、收获

进一步的熟悉了mysql的运用,记住了很多插入,修改,删除的语句。

2、存在的问题

不够熟练,需要背语句结构。

实验八 视图

一、实验目的:

(1) 理解视图的概念。

(2) 掌握创建、更改、删除视图的方法。 (3) 掌握使用视图来访问数据的方法。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

1) 使用SQL语句创建、管理视图

28

(1) 创建视图。

① 创建一个名为sc_view1的视图,从数据库gradem的sc表中查询出成绩大于90分的所有学生选修成绩的信息。

② 创建一个名为sc_view2的视图,从数据库gradem的sc表中查询出成绩小于80分的所有学生的学号、课程号、成绩等信息。

③ 创建一个名为sc_view3的视图,由数据库gradem的student、course、sc表创建一个显示“”班学生选修课程(包括学生姓名、课程名称、成绩等信息)的视图。

④ 创建一个从视图sc_view1中查询出课程号“c01”的所有学生的视图。

(2) 修改视图的定义。

修改视图sc_view1,使其从数据库gradem的sc表中查询出成绩大于90分且第3学期的所有学生选修成绩的信息。

(3) 视图的删除。 ① 将视图sc_view1删除。

(4) 管理视图中的数据。

29

① 从视图sc_view2中查询出学号为“25”、课程号为“a01”的学生选修成绩的信息。

② 将视图sc_view2中学号为“22”、课程号为“c02”的成绩改为87。

③ 从视图sc_view2中将学号为“23”、课程号为“a01”的学生信息删除。

四、思考题

向视图中插入的数据能进入到基本表中去吗修改基本表的数据会自动反映到相应的视图中去吗

五、实验总结

1、收获

2、存在的问题

30

实验九 数据库的安全性

一、实验目的:

(1) 理解My SQL的权限系统的工作原理。 (2) 理解My SQL账户及权限的概念。 (3) 掌握管理My SQL账户和权限的方法。

(4) 学会创建和删除普通用户的方法和密码管理的方法。 (5) 学会如何进行权限管理。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

1)利用Navicat图形工具实现下列操作:

① 使用root用户创建aric用户,初始密码设置为abcdef。让该用户对gradem数据库拥有SELECT、UPDATE、DROP权限。

②用aric用户登录,利用aric用户来验证自己是否有GRANT权限和CREATE权限。 ③用root用户登录,收回aric用户的删除权限。

2) 利用命令实现下列操作:

进行本实验的准备工作是:以root的身份完成了表student、course、sc的创建。 (一) 授权

1.以root的身份登陆mysql,创建用户u1+学号后四位,u2+学号后四位,u3+学号后四位,u4+学号后四位。

2.用户root把查询Student表权限授给用户u1+学号后四位,验证u1能够执行相应的查询。

1) 查询所有姓刘的学生的姓名、学号和性别。

2) 查询名字中第二字为“勇”字的学生的姓名和学号。

31

3. 用户root授予用户u4+学号后四位对student表的insert权限,并允许此权限传播。

4. 用户u4+学号后四位将对表student的insert权限授予u3+学号后四位,并允许将权限转授给其他用户(例如:u3+学号后四位),描述过程及操作。

(二) 回收权限

1. 收回所有用户对表sc的查询权限

2. 收回用户u4对student表的insert权限

3. 在回收权限之后验证用户是否真正丧失了该权限(查询表,插入记录),描述过程及提示信息。

四、实验总结

1、收获

2、 存在的问题

32

实验十 数据库的完整性

一、实验目的:

(1) 理解My SQL的实体完整性的定义。 (2) 理解My SQL的参照完整性的定义。 (3) 理解My SQL的自定义完整性的定义。

二、实验要求

1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容;

三、 实验内容及步骤

(一) 实体完整性

1.建立部门表DEPT(deptno,deptname),部门编号Deptno列为主码。写出两种方式:一种在列级定义主码,一种是在表级定义主码。

2.建立成绩表sc1(sno,cno,grade),将sno、cno属性组定义为码。

(二) 参照完整性

1. 建立成绩表sc2(sno,cno,grade),(sno、cno)是主码,sno、cno分别参照引用student表上的sno和course表的cno主码。

33

2.insert操作验证外键约束

(1)在sc2中插入数据(’1001’,’01’,95),假设cno=’01’的数据存在,而sno=’1001’的数据不存在,执行结果是什么

(2)在student表中添加sno=’1001’的数据,然后继续执行(1)中的插入数据操作,执行结果是什么

3、delete操作验证外键约束

(1)MySQL在外键的删除上有RESTRICT、NO ACTION(类似RESTRICT)、CASCADE和SET NULL四种行为,默认是那种行为在默认情况下,对student表中的sno=’1001’的记录,执行删除操作时,执行结果是什么若执意要删除该条记录,需要如何操作

(2)SET NULL指当删除主表中被引用列的数据时,将子表中相应引用列的值设置为NULL值。SET NULL有个前提就是外键引用列必须可以设置为NULL。

把sc表的sno外键约束删除,将外键约束的删除行为改为SET NULL,并验证该删除策略。

34

(3)CASCADE指当删除主表中被引用列的数据时,级联删除子表中相应的数据行。 把sc表的sno外键约束删除,将外键约束的删除行为改为CASCADE。,并验证该删除策略。

(三)自定义完整性

1.修改部门表DEPT,要求添加约束constraint c1:部门名称Dname列取值唯一。

2.建立学生登记表Student2,要求学号在9000至9999之间(约束名默认),年龄<29(约束名为a2),性别只能是’男’或’女’ (约束名默认),姓名非空。

3.修改表Student的结构,由年龄小于29改为小于40。(先删除原有的约束,再添加新约束)

35

四、实验总结

1、收获 2、存在的问题

36

因篇幅问题不能全部显示,请点此查看更多更全内容

Top