《数据库导论》实验报告- 实验六实验报告

数据库导论》实验报告

              

              院系:

班级:

姓名:

学号:

实验6  数据完整性(规则和约束)

(Rule)规则 就是数据库中对存储在表的列或用户自定义数据类型中的值的规定和限制。规则是单独存储的独立的数据库对象。规则与其作用的表或用户自定义数据类型是相互独立的,即表或用户自定义对象的删除、修改不会对与之相连的规则产生影响。规则和约束可以同时使用,表的列可以有一个规则及多个CHECK 约束。规则与CHECK 约束很相似,相比之下,使用在ALTER TABLE 或CREATE TABLE 命令中的CHECK 约束是更标准的限制列值的方法,但CHECK 约束不能直接作用于用户自定义数据类型。

SQL Server中的约束用来确保系统的完整性。一般约束可以分为:主键约束,外键约束,检查约束,默认约束,唯一约束,非空约束。

1.实验目的

(1)掌握Transact-SQL语句(CREATE RULE、DROP RULE)创建和删除规则的方法。

(2)掌握系统存储过程sp_bindrule、sp_unbindrule绑定和解除绑定规则的操作方法,以及sp_helptext查询规则信息、sp_rename更名规则的方法。

(3)掌握SQL Server管理平台和Transact-SQL语句(CREATE TABLE、ALTER TABLE)定义和删除约束的方法,并了解约束的类型。

2.实验内容及步骤

(1)为studentsdb数据库创建一个规则,限制所输入的数据为7位0~9的数字。

① 复制student_info表,命名为stu_phone,在stu_phone表中插入一列,列名为“电话号码”。完成以下代码实现该操作。

SELECT * INTO stu_phone FROM student_info

ALTER TABLE stu_phone ADD 电话号码 CHAR(7) NULL

stu_phone表结构如图1-10所示。

图1-10  stu_phone表结构

② 创建一个规则phone_rule,限制所输入的数据为7位0~9的数字。实现该规则的代码为

CREATE rule phone_rule

AS

@phone LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

③ 使用系统存储过程sp_bindrule将phone_rule规则绑定到stu_phone表的“电话号码”列上。实现该操作的代码为

sp_bindrule phone_rule ,'stu_phone.电话号码'

④ 输入以下代码,进行一次插入操作:

INSERT INTO stu_phone(学号,姓名,电话号码) VALUES('0009','王国强','1234yyy')

产生以下出错信息:

消息513,级别16,状态0,第1 行

列的插入或更新与先前的CREATE RULE 语句所指定的规则发生冲突。该语句已终止。冲突发生于

数据库'studentsdb',表'dbo.stu_phone',列'电话号码'。

语句已终止。

试分析: 为什么会产生该出错信息?如果要实现插入操作,应修改INSERT INTO语句中的哪个值?

答:输入的电话号码不符合规则,应该修改'1234yyy'的值,规则限制所输入的数据为7位0~9的数字。

(2)创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,保证输入的性别值只能是“男”或“女”。

(3)使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为stu_s_rule。

(4)解除绑定;删除规则。

① 解除规则的绑定:sp_unbindrule 'stu_phone.电话号码'

② 删除stu_phone规则:DROP rule phone_rule

(5)在studentsdb数据库中用SQL Server管理平台完成:创建表stu_con,并同时创建约束。

① 创建表的同时创建约束。表结构如图1-12所示。

图1-12  要创建的表的结构

约束要求如下:

将学号设置为主键(PRIMARY KEY),主键名为pk_sid。

为姓名添加唯一约束(UNIQUE),约束名为uk_name。

alter table 表名

add constraint 约束名 unique (列名)

为性别添加属性值约束(CHECK),约束名为ck_bday,其检查条件为:性别='男' OR 性别='女'。

② 在stu_con表中输入如表1-1所示的数据记录。

表1-1  在stu_con表中插入的数据

学号

姓名

性别

出生日期

家庭住址

0009

张小东

1989-4-6

0010

李梅

1983-8-5

0011

王强

1988-9-10

0012

王强

1989-6-3

分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的数据是否一致?

因为受到约束,因此性别列输入“王”时会报错。

禁止在姓名列输入重复数据,会报错。

插入记录后,表中数据与所插入的数据并不一致。

③ 使用ALTER TABLE语句的DROP CONSTRAINT参数项在查询设计器中删除为stu_con表所建的约束。

(6)在SQL Server管理平台完成上,为studentsdb数据库的grade表添加外键约束(FOREIGN KEY),要求将“学号”设置为外键,参照表为student_info,外键名称为fk_sid。

① 使用系统存储过程sp_help查看grade表的外键信息。

② 在grade表中插入一条记录,学号为0100,课程编号为0001,分数为78。观察SQL Server会做何处理,为什么?如何解决所产生的问题?

SQL Server 产生报错,因为INSERT 语句与 FOREIGN KEY 约束"fk_sid"冲突。

首先应该在参照表student_info中添加学号为0100的信息,再执行插入操作。

③ 使用查询设计器删除grade表的外键fk_sid。

【实验过程中遇到的问题】

问题一:

在我执行到第(5)步的时候,在创建表stu_con表的时候,我输入了如下代码,当时由于代码较长,执行代码时无法通过,估计是遇到了一些小错误。

问题2:

还是在第(5)步骤中出现的问题,当时要求往stu_con表插入四条数据,当时我审题失误,使用了SQL Server管理平台去进行插入操作,以至于后来无法正常查看所要求的结果。

【解决方法】

问题1解决方法:

我在思索一番之后,发现是在“出生日期”那一行代码少加了个逗号,加上逗号后运行成功了。

问题2解决方法:

意识到错误后,我又采取了用查询设计器来进行数据的插入,最终得出了预期中的结果截图。

三、实验心得

经历完今天的第五次实验,我们的数据库实验算是圆满结束了,在今天的实验中,我们利用到了规则与约束的理论知识,尤其在做实验的过程中,我又接触到了“外键”,在实验步骤(6)中,要求在grade表中插入一条记录,学号为0100,课程编号为0001,分数为78。让我观察SQL Server所做的处理,发现会报错,并解释原因,开始我是不知如何解释的,上网一搜“外键”的定义,欸,一拍脑门,这不是之前数据库老师在课上讲过的嘛,“外键”的取值得依存在它的参照表,所以这报错的原因也就很明显了,那就是外键参照表student_info表中没有学号为0100的信息。

本次实验,我掌握了使用Transact-SQL语句或SQL Server管理平台对规则和约束进行创建和删除的操作,熟悉了利用sp_bindrule、sp_unbindrule绑定和解除绑定规则的操作方法,了解了sp_help,sp_helptext,sp_rename的用法。

在每一次实验中,如果认真去一步一步实践,都能够有很多收获,不光是对理论知识的巩固,在做实验的过程中还在锻炼我们的自我反思、自我纠错的能力,只是万事开头难,像我第一次做数据库实验的时候,几乎没有基础,对SQL Server软件也是一点不熟悉,但是当我向老师求助,迈出这第一步之后,后面的实验就变得越来越顺利,因此才有这么多的收获。

本文档为数据库上机实验报告,是自己认认真真一步一步写的,报告包含试验中的具体步骤,过程以及代码和实验结果截图,和实验总结。 实验一 实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的使用和数据库设计的一般方法。 实验内容: (1)SQL SERVER2005的使用 (2)数据库设计过程并利用SQL SERVER2005建立数据库。 实验二 实验题目: 数据库的定义 实验目的:掌握数据建立、修改、删除、索引的SQL语句。 实验内容: (1)数据的建立 (2)数据的修改 (3)数据的删除 (4)数据的索引建立 为S的DEPT建立唯一索引 (5)视图的建立与删除 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE) 查询1983年以后出生的计算机系学生基本信息。 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。 查询计算机系学生选课多于3门的学生学号。 查询计算机系学生2号课不及格的学生学号和成绩。 实验三 实验题目: 数据的操作 实验目的: 掌握数据数据操作的SQL语句。 实验内容: SQL语句插入数据操作 SQL语句修改数据操作 SQL语句删除数据操作 SQL语句查询数据操作 维护数据SQL语句: (1)在学生中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’) (2)删除数据库中学号为’200213801’的退学学生有关信息。 (3)将计算机系学生2号课成绩全部提高5%。 查询数据SQL语句: (4)统计有学生选修的课程门数。 (5)统计HU老师所授每门课程的学生平均成绩。 (6)统计所有选修人数多于20的课程号和选课人数,并按人数降序排列,若人数相等,则按课程号升序排列。 (7)检索所有缓考即成绩为NULL的同学学号、姓名和缓考课程号。 (8)检索‘OS’课成绩高于该课平均成绩的同学学号。 (1) 检索计算机系女生的学号和姓名。 (2) 检索全体学生姓名、出生年份和所在系。 (3) 检索未选修任何课程的学生学号。 (4) 检索WANG老师所授课程号、课程名。 (5) 检索所有姓LI同学的基本信息。 (6) 检索选修‘DATABASE’课程的学生学号。 (7) 检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。 (8) 检索选修TIAN老师所授全部课程的学生学号。 实验四 实验题目: T-SQL编程 实验目的: 掌握T-SQL语句的使用。 实验内容: 1.定义一个变量,用来存储两名学生的学号,姓名,所在系。 2.编写一个自定义的函数,该函数接受一个学生姓名,返回其学生中基本信息及选课情况。 3.试用CASE语句输出学生中各年龄段的学生人数。 4.编写存储过程,以系别作为参数,统计指定系别的人数,并作为存储过程的输出。 实验题目: 数据库的完整性 实验目的: 掌握数据库的完整性约束定义,完整性检查及违约处理方式。 掌握触发器的定义及使用。 实验内容: 1. 定义S, C的完整性约束 2. 定义SC的完整性约束,要求当其被参照发生删除操作时,违约处理的方式为级联,当其被参照发生修改操作时,违约处理的方式为拒绝。 3. 触发器 ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log内 ☆ 建立一个INSTEAD OF触发器,每当修改课程中记录时,利用触发器动作替代修改操作。 ☆ 建立一个DDL 触发器,不允许删除数据库,并作出响应。 实验六 实验题目: 数据库的安全性 实验目的: 掌握SQL SERVER 2005的安全控制机制 实验内容: 1. 创建登录 创建lg1,lg2,并设定口令 2. 定义用户 定义user1,user2,user1以lg1登录,user2以lg2登录,user1定义角色ddl_admin,datareader,datawriter 3. 掌握SQL SERVER 2005架构和用户分离的概念 为user1创建架构u1,并建立test,通过授权模式的方法,授权给user2访问test的权限 4. 数据库的授权、收权语句 ☆ 将查询SC和修改GRADE属性的权限授予用户user1。 ☆ 将对S的插入权限授予用户user2,并允许他将此权限授予其他用户。 ☆ 收回所有用户对S的插入权限。 实验七 实验题目: 数据库设计 实验目的: 掌握数据库的概念结构设计和逻辑结构与设计,掌握ER图的示方法即如何将ER模型转化为关系模型 1.学校有若干系,每个系有若干班级和教研室,每个教研室有若干教师,其中有教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课有若干学生选修。 2.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料组成,不同零件所用的材料可以相同。有些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青竹小轩_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值