手机版

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

发布时间:2024-11-08   来源:未知    
字号:

网络工程专业 2009级

实验报告

学 院:课程名称: 数据库系统 实验名称: 实验五 数据库完整性与安全性实验 班 级:姓 名: 学 号:

网络工程专业 2009级

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

1.

实验目的

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

2. 实验环境

操作系统:Microsoft Windows 7旗舰版 (32位)。

硬件:容量足以满足MySQL 5.5安装及后续实验的使用。 软件:数据库版本:MySQL 5.5

3. 3.1.

实验内容及过程 完整性实验

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

照完整性约束;

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

sno varchar(6) NOT NULL, cno varchar(3) NOT NULL, grade int(11) DEFAULT NULL, PRIMARY KEY (sno,cno) ) DEFAULT CHARSET=gbk;

Create Table student (

sno varchar(6) NOT NULL,

sname varchar(6) DEFAULT NULL, sex varchar(2) DEFAULT NULL, bdate datetime DEFAULT NULL, dept varchar(8) DEFAULT NULL, classno varchar(3) DEFAULT NULL, PRIMARY KEY (sno) ) DEFAULT CHARSET=gbk;

网络工程专业 2009级

Create Table course (

cno varchar(3) NOT NULL,

cname varchar(12) DEFAULT NULL, lhour int(11) DEFAULT NULL, credit int(11) DEFAULT NULL,

semester varchar(2) DEFAULT NULL, PRIMARY KEY (cno) ) DEFAULT CHARSET=gbk;

不过为了进一步熟悉主键的操作。我对每个基表先删除主键,然后添加主键如下图,从而实现实体完整性约束:

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

网络工程专业 2009级

添加完主键和外键后,我们用show create table命令查看各基表信息,可得如下截图。我们可以清楚地看到各个基表的主键和外键都成功添加了。

网络工程专业 2009级

3.1.2. 分别向学生表、课程表插入具有相同学号和相同课程编号的学生数据和

课程数据,验证其实体完整性约束;

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

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

完整性约束;

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

网络工程专业 2009级

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

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

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

由于存储过程中会用到结束符,所以我们先用delimiter修改结束符为//。由下图,我们还可以看到现在数据库里没有任何存储过程。

接着,我们定义存储过程查询某个学生的选课情况。并显示出现在的存储过程。由图可见,创建成功。 在此存储过程中,我定义了一个读入的参数numt,用来存储我们要查询的学生学号。

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

网络工程专业 2009级

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号。

网络工程专业 2009级

3.2. 安全性实验内容

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

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

sy授予访问

student

的读权限。

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

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

据进行修改;

登录测试:

用超级用户即root登录

网络工程专业 2009级

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

访问student测试:

用root查看student

用sy查看student

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

插入student测试: 用root修改student:

用sy修改student:

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

网络工程专业 2009级

访问sc测试: 用root访问sc:

用sy访问sc:

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

3.2.3. 创建数据库角色,并授予访问学生数据库的读、写权限; 3.2.4. 将角色赋予(1)中定义的用户,建立用户和角色联系;

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

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

4.

实验小结

实验中遇到的问题:这次实验进行比较顺利,只是按照实验要求逐步编程实现即可。实验中,但是由于MySQL本身的问题纠结了很久。

MySQL对触发器的支持还没有像SQL Server那么充分,需要创建新表来进行触发操作。 若是对旧表操作,则会出现死循环报错。

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

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

网络工程专业 2009级

实验心得:通过这次实验,我在对完整性规则的定义实现中,熟悉了解MySQL中完整性保证的规则和实现方法,加深对数据完整性的理解。并通过对安全性相关内容的定义,熟悉了MySQL中安全性的内容和实现方法,加深对数据库安全性的理解。

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

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

北邮 大三下 数据库实验五 mysql版本.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)