北邮 大三下 数据库实验五 mysql版本.docx

上传人:b****6 文档编号:4606603 上传时间:2022-12-07 格式:DOCX 页数:11 大小:743.73KB
下载 相关 举报
北邮 大三下 数据库实验五 mysql版本.docx_第1页
第1页 / 共11页
北邮 大三下 数据库实验五 mysql版本.docx_第2页
第2页 / 共11页
北邮 大三下 数据库实验五 mysql版本.docx_第3页
第3页 / 共11页
北邮 大三下 数据库实验五 mysql版本.docx_第4页
第4页 / 共11页
北邮 大三下 数据库实验五 mysql版本.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

北邮 大三下 数据库实验五 mysql版本.docx

《北邮 大三下 数据库实验五 mysql版本.docx》由会员分享,可在线阅读,更多相关《北邮 大三下 数据库实验五 mysql版本.docx(11页珍藏版)》请在冰豆网上搜索。

北邮 大三下 数据库实验五 mysql版本.docx

北邮大三下数据库实验五mysql版本

实验报告

学院:

计算机学院

课程名称:

数据库系统

实验名称:

实验五数据库完整性与安全性实验

班级:

2009211311

姓名:

schnee

学号:

 

实验五数据库完整性与安全性实验

1.实验目的

通过对完整性规则的定义实现,熟悉了解kingbase中完整性保证的规则和实现方法,加深对数据完整性的理解。

通过对安全性相关内容的定义,熟悉了解kingbase中安全性的内容和实现方法,加深对数据库安全性的理解。

 

2.实验环境

操作系统:

MicrosoftWindows7旗舰版(32位)。

硬件:

容量足以满足MySQL5.5安装及后续实验的使用。

软件:

数据库版本:

MySQL5.5

 

3.实验内容及过程

3.1.完整性实验

3.1.1.分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束;

其实在导入txt数据时,我已经定义了各个基表的主键。

CREATETABLEsc(

snovarchar(6)NOTNULL,

cnovarchar(3)NOTNULL,

gradeint(11)DEFAULTNULL,

PRIMARYKEY(sno,cno)

)DEFAULTCHARSET=gbk;

CreateTablestudent(

snovarchar(6)NOTNULL,

snamevarchar(6)DEFAULTNULL,

sexvarchar

(2)DEFAULTNULL,

bdatedatetimeDEFAULTNULL,

deptvarchar(8)DEFAULTNULL,

classnovarchar(3)DEFAULTNULL,

PRIMARYKEY(sno)

)DEFAULTCHARSET=gbk;

CreateTablecourse(

cnovarchar(3)NOTNULL,

cnamevarchar(12)DEFAULTNULL,

lhourint(11)DEFAULTNULL,

creditint(11)DEFAULTNULL,

semestervarchar

(2)DEFAULTNULL,

PRIMARYKEY(cno)

)DEFAULTCHARSET=gbk;

不过为了进一步熟悉主键的操作。

我对每个基表先删除主键,然后添加主键如下图,从而实现实体完整性约束:

接下来,我给sc表添加student和course的外键,实现参照完整性约束如下图:

添加完主键和外键后,我们用showcreatetable命令查看各基表信息,可得如下截图。

我们可以清楚地看到各个基表的主键和外键都成功添加了。

3.1.2.分别向学生表、课程表插入具有相同学号和相同课程编号的学生数据和课程数据,验证其实体完整性约束;

从截图可见,我们分别对student和course表格插入具有相同学号和相同课程编号的学生数据和课程数据,都失败了,出现error,即,验证了其实体完整性约束。

3.1.3.向学生选课表中插入一条数据,课程编号是课程表中没有的,验证参照完整性约束;

如图,course表格中没有C09,因此向sc表中添加此数据时,受参照完整性约束,而出现了错误,插入失败。

即验证了参照完整性约束。

3.1.4.删除学生表中的所有数据,验证参照完整性约束;

由截图可见,删除失败了,这是受参照完整性约束的影响。

3.1.5.定义存储过程,完成查询某个学生的选课情况,并执行;

由于存储过程中会用到结束符,所以我们先用delimiter修改结束符为//。

由下图,我们还可以看到现在数据库里没有任何存储过程。

接着,我们定义存储过程查询某个学生的选课情况。

并显示出现在的存储过程。

由图可见,创建成功。

在此存储过程中,我定义了一个读入的参数numt,用来存储我们要查询的学生学号。

最后,我们调用存储过程,查看运行结果。

证明调用成功。

3.1.6.定义触发器,当向学生表插入新的一条记录时,将所有学生出生日期加1;并对其进行测试;

由于Mysql和其他的软件不一样,所以几经纠结,最后才终于找到了正确的创建触发器的方法。

需要复制一个新的table,然后通过对旧table的操作来触发对新table的操作,而不能通过一个表的insert触发对同一个表的操作。

下图是正确的做法,错误的做法会在实验小结中遇到的问题里给出。

其中,我还用到了MySQL的时间处理函数date_add。

日期加1我的理解是加一天,而且借此学习了一下时间处理的相关函数,而不是直接bdate=bdate+1

向student里插入一条新纪录,触发触发器mytri的操作。

现在查看student和new_student的变化。

可见student已经插入成功,但数据都还是原数据,没有变化。

而new_student里的数据则出生日期加了一天。

1月2号都变为3号。

3.2.安全性实验内容

3.2.1.定义一新的登陆帐号、数据库用户,并授予其访问学生数据库的读权限;

定义一个新的登录帐号、数据库用户sy。

对sy授予访问student的读权限。

我们查看加入新用户后的用户表格:

3.2.2.分别用超级用户和新定义的用户访问学生数据库,并对其中的学生表数据进行修改;

登录测试:

用超级用户即root登录

用新用户sy登录。

可见两个用户都登录成功了。

访问student测试:

用root查看student

用sy查看student

由于sy也有查看student的权限,所以两个用户都查看成功。

插入student测试:

用root修改student:

用sy修改student:

可见,sy由于没有权限,所以修改失败了。

访问sc测试:

用root访问sc:

用sy访问sc:

同样,我们可以看到,由于sy只有查看student的权限,所以查看sc也失败了。

3.2.3.创建数据库角色,并授予访问学生数据库的读、写权限;

3.2.4.将角色赋予

(1)中定义的用户,建立用户和角色联系;

3.2.5.再次用此用户访问学生数据库,并对其中的学生表数据进行修改。

此上三部分实验由于MySQL不支持创建role,所以无法实验。

 

4.实验小结

实验中遇到的问题:

这次实验进行比较顺利,只是按照实验要求逐步编程实现即可。

实验中,但是由于MySQL本身的问题纠结了很久。

MySQL对触发器的支持还没有像SQLServer那么充分,需要创建新表来进行触发操作。

若是对旧表操作,则会出现死循环报错。

删除触发器的相关操作为:

此外,MySQL不支持创建role,所以导致部分实验内容无法完成。

实验心得:

通过这次实验,我在对完整性规则的定义实现中,熟悉了解MySQL中完整性保证的规则和实现方法,加深对数据完整性的理解。

并通过对安全性相关内容的定义,熟悉了MySQL中安全性的内容和实现方法,加深对数据库安全性的理解。

实验过程中虽然为触发器纠结了很久,但是总而言之,实验还是比较简单的,而且最重要的是在实践中巩固了我课堂所学的概念,真切体会到数据库完整性和安全性的概念,并实践了存储过程和触发器的知识。

实验不可小看,只有在实践中在自己的编程实现中,才能真正地较好掌握课堂所学的知识。

实践出真知就是这个道理。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1