实验10 数据完整性

更新时间:2024-03-16 09:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验10 数据完整性

实验目的

1. 掌握保证数据完整性的方法:约束、默认和规则 2. 理解事务的提交和回滚 3. 理解SQL Server2000的锁模式

实验准备

1. 了解数据完整性的概念以及保证数据完整性的方法。 2. 了解事务管理和SQL Server锁模式。 3. 还原studentdb数据库。

实验内容及步骤

1. 打开查询分析器,选择studentdb数据库,输入如下SELECT语句并执行,在

studentdb数据库中产生新表“CUIT_专业目录”。

select 专业代码,专业简称,专业名称,层次,专业性质,学制,专业类别,所属系科

into CUIT_专业目录 from 专业

2. 测试主键约束。

(1) 打开企业管理器,将列“专业代码”设置为表“CUIT_专业目录”的主键。 (2) 通过INSERT语句为“cuit_专业目录”添加新记录,语句如下:

insert into cuit_专业目录(专业代码,专业简称,专业名称,层次,

专业性质,学制,专业类别,所属系科)

values(1090,'物流管理本科','物流管理','本','普通',4,'管理学','管理系') 观察运行结果,注意系统提示,如何修改语句,使新记录添加成功。

3. 创建数据库关系图,测试外键约束。

(1) 打开企业管理器,展开控制台子目录【数据库】|【studentdb】,选中“关系图”,

单击鼠标右键,弹出快捷菜单,选择【新建数据库关系图(M)…】。 (2) 根据向导提示,选择表 “CUIT_专业目录”和“班”,单击“完成”按钮,打

开关系图窗口,如图10- 1。

图10- 1 关系图窗口

(3) 按下鼠标左键,选中表“CUIT_专业目录”的“专业代码”列,拖动鼠标至“班”

的“所属专业”列后松开鼠标左键,弹出创建关系对话框,如图10- 2。

图10- 2 创建关系对话框

(4) 单击“确定”按钮,建立外键约束,关闭窗口并保存该关系图,名为“专业与

班”。

(5) 通过INSERT语句为“班”添加新记录,语句如下:

insert into 班(所属专业,年级,班序号,班简名,班全名,所在地点)

values(1092,2009,1,'计算机091','计算机科学2009级1班','航空港') 语句是否执行成功,为什么? 提示:运行SQL语句

select * from CUIT_专业目录 where 专业代码=1092

4. 创建唯一性约束并测试。

(1) 在企业管理器选中表“CUIT_专业目录”,打开表设计器。 (2) 单击工具栏“管理索引/键…”按钮

,弹出图10- 3对话框。

(3) 单击“新建”按钮,根据图10- 3提示,在列“专业简称”上创建唯一性约束 。

图10- 3 创建唯一性约束

(4) 创建完成后,关闭表设计器窗口并保存。 (5) 修改表“CUIT_专业目录”数据,SQL语句如下:

update cuit_专业目录

set 专业简称='会计学本科' where 专业代码=1069 语句是否运行成功,为什么?

提示:运行SQL语句

select * from CUIT_专业目录 where 专业简称='会计学本科'

5. 创建CHECK约束并测试。

(1) 在企业管理器选中表“CUIT_专业目录”,打开表设计器。 (2) 单击工具栏“管理约束…”按钮

,弹出图10- 4对话框。

(3) 单击“新建”按钮,根据图10- 4提示,为表“CUIT_专业目录”的“层次”

列创建建CHECK约束 。

输入正确的约束表达式

图10- 4 创建CHECK约束

(4) 创建完成后,关闭表设计器窗口并保存。

(5) 选中 “CUIT_专业目录”表,单击鼠标右键,弹出快捷菜单,选择【打开表

(O)】|【返回所有行(A)】。

(6) 在浏览表数据窗口修改“层次”列数据,测试能否输入除了“本”、“专”、“硕”

以外的其他字符。

6. 设置使用默认值。

(1) 在企业管理器选中表“CUIT_专业目录”,打开表设计器。 (2) 选中“层次”列,为其设置默认值“本”,如图10- 5所示。 (3) 完成后关闭表设计器并保存。

选中设置默认值的列 输入默认值

图10- 5 设置默认值

(4) 为该表添加一条新记录,如果不输入“层次”,添加完成后,观察“层次”列

的数据内容。

7. 创建、绑定并测试规则。

(1) 在企业管理器控制台中展开子目录【数据库】|【studentdb】,选中“规则”,

单击鼠标右键,弹出快捷菜单,选择【新建规则(R)…】选项,打开创建规则对话框,如图10- 6。

(2) 根据图10- 6提示,输入规则名称和表达式。

输入规则名称 输入规则表达式

图10- 6 创建规则对话框

(3) 单击“确定”按钮,完成规则创建。 (4) 绑定规则。

I.

在企业管理器规则列表窗格中选中“成绩规则”,单击鼠标右键,弹出快捷菜单,选择【属性】,打开规则属性对话框,如图10- 7。

图10- 7 规则属性

II. 单击“绑定列”按钮,打开绑定规则对话框,如图10- 8。

图10- 8 绑定规则

III. 在“表(T)”下拉列表中选定“[dbo].[成绩]”,在“未绑定的列(U)”

列表框中选择“平时成绩”、“考试成绩”和“总评成绩”,单击“添加(D)>>”按钮,此三列被添加至“绑定列(B)”列表中。 IV. 单击“确定”按钮,完成规则的绑定。

(5) 修改被绑定列数据,测试能否输入小于0或大于100的数据。

8. 测试事务。在查询分析器中输入以下程序代码并执行,查看执行结果,理解事务的

提交和回滚。 (1) 事务回滚

select count(*) as 事务开始前记录数 from cuit_专业目录 begin transaction

insert into cuit_专业目录(专业代码,专业简称,专业名称,层次,专业性质,学制,

专业类别,所属系科)

values('1601', '广告设计1','广告设计专科','专','普通',3,'工学','社科系') select count(*) as 插入新行后记录数 from cuit_专业目录 rollback

select count(*) as 事务回滚后记录数 from cuit_专业目录 (2) 事务提交

select count(*) as 事务开始前记录数 from cuit_专业目录 begin transaction

insert into cuit_专业目录(专业代码,专业简称,专业名称,层次,专业性质,学制,

专业类别,所属系科)

values('1601', '广告设计1','广告设计专科','专','普通',3,'工学','社科系') select count(*) as 插入新行后记录数 from cuit_专业目录 commit

select count(*) as 事务提交后记录数 from cuit_专业目录

9. 体验锁现象,学会查询SQL Server的进程和锁定,解除锁定。

(1) 输入以下代码并执行:

begin tran

update 课程 set 课程名称='C语言' where 课程代码=1001 waitfor delay '00:04:00' --等待4分钟 commit tran

(2) 在9(1)程序代码运行过程中,请新建查询窗口(单击查询分析器工具栏“新建

查询”按钮

),输入以下代码并执行,体会查询时间。

begin tran

select * from 课程 where 课程代码=1001 commit tran

(3) 在以上两段代码运行过程中,打开企业管理器,展开控制台根目录,选择【管

理】子目录,查看当前进程和锁定,如图10- 9,右键单击某进程,弹出快捷菜单,选择【属性】(图10- 9),查看进程详细信息,如图10- 11,可单击“取消进程”按钮,解除锁定。

图10- 9 控制台根目录

图10- 10 进程快捷菜单

图10- 11 进程属性

实验思考

1. 在SQL Server2000中,可采用哪些方法实现数据完整性? 2. 在6(2)中,“层次”列的默认值可以是“博”吗?为什么? 3. 如何解除“成绩规则”对“总评成绩”列的绑定? 4. 为什么8(1)中数据没有被添加,而8(2)中数据被添加?

本文来源:https://www.bwwdw.com/article/tdj8.html

Top