数据库完整性实验报告

2018-11-23 22:53

北京理工大学珠海学院实验报告

ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY

班级 学号 姓名 指导教师 张申勇 成绩

实验题目 数据库完整性 实验时间 2012.4.20 一 实验目的

1. 熟悉通过SQL对数据进行完整性控制;

2. 针对具体应用要求,设计相应的完整性约束。

二 实验工具SQL Server 2005

利用SQL Server 2005 SSMS及其SQL查询编辑器。

三 实验内容和要求

使用SQL对数据进行完整性控制(3类完整性、CHECK短语、CONSTRAIN子句、触发器)。用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。根据以下要求认真填写实验报告,记录所有的实验用例。

具体操作内容:

创建以下两个关系模式,并分别插入相应的数据。

职工(职工号,姓名,年龄,职务,工资,部门号)其中职工号为主码; 部门(部门号,名称,经理名,地址,电话号码),其中部门号为主码; (1)使用SQL语言定义这两个关系模式,并完成以下完整性约束条件的定义;

(a)定义每个模式的主码; (b)定义参照完整性;

(c)定义职工的年龄不能小于18岁,并且不能超过60岁; (d)职工的姓名不能为空;

(e)职工的工资不能为空,且不能小于800;

(f)部门名称不能为空且不能重复,定义约束名为UK_dName;

(2)使用SQL语言分别向两个表中插入7行记录,验证上面的各种约束条件;

(3)将职工的年龄改为不能小于16岁,并且不能大于65岁;

(4)定义一个表tbl_Emp_Log(eNO, eSalary, Username, ModiDate);在职工表上定义修改和插入数据的触发器,将插入的职工号和工资数据填入到Emp_log表中,并记录操作的用户和插入时间;如果修改了职工的工资,也把职工号和修改后的工资数据填入到Emp_log表中,并记录操作的用户和插入时间。使用SQL语句向职工表中插入数据和修改工资,验证触发器的效果。

1

四 实验报告 4.1 实验环境:

Windows7

Microsoft SQL server Management Studio 2005

4.2 实验内容与完成情况:

--新建数据库

create database work go use work

--创建以下两个关系模式,并分别插入相应的数据。 --Worker(职工号,姓名,年龄,职务,工资,部门号) go

--()使用SQL语言定义这两个关系模式,并完成以下完整性约束条件的定义;--(a)定义职工号为职工表的主码; create table Worker(

职工号varchar(10) primary key, --(d)职工的姓名不能为空; 姓名char(10) not null,

--(c)定义职工的年龄不能小于岁,并且不能超过岁; 年龄int

constraint w_age check (年龄>18 and 年龄<65), 职务char(15),

--(e)职工的工资不能为空,且不能小于; 工资money not null

constraint w_sa check(工资>800), 部门号char(50), --(b)定义参照完整性

foreign key(职工号) references Worker(职工号) )

2

--Section(部门号,名称,经理名,地址,电话号码) create table Section ( --定义部门号为部门表的主码 部门号char(10) primary key,

--(f)部门名称不能为空且不能重复,定义约束名为UK_dName; 名称char(10)not null

constraint UK_dName unique, 经理名char(10), 地址char(50), 电话char(15), --(b)定义参照完整性

foreign key(部门号) references Section(部门号) ); go

--()使用SQL语言分别向两个表中插入行记录,验证上面的各种约束条件; --验证部门名称不能为空且不能重复,定义约束名为UK_dName;

insert into Section values('a001','市场部门','李永','北工','13750000000'); insert into Section values('a002','营销部门','李刚','北工','13750000002'); insert into Section values('a003','营销部门','李忠','北工','13750000003'); insert into Section values('a003',null,'李吧','北工','13750000004');

insert into Worker values('a001001','王明',20,'市场营销员',2000,'a001'); insert into Worker values('a001002','李村',29,'市场营销员',2000,'a001'); --验证职工的工资不能为空,且不能小于;

insert into Worker values('a002001','罗杰',19,'销售员',null,'a002'); insert into Worker values('a002002','李红',24,'销售员',700,'a002'); --验证职工的姓名不能为空;

insert into Worker values('a002003',null,32,'经理',5000,'a002'); --验证职工的年龄不能小于岁,并且不能超过岁;

insert into Worker values('a001003','李永',61,'经理',5000,'a001'); insert into Worker values('a002004','黄鹂',17,'副经理',4500,'a002'); --查询部门表和职工表的数据

--()将职工的年龄改为不能小于岁,并且不能大于岁; alter table Worker drop constraint w_age; alter table Worker

add constraint w_age check(年龄>16 and 年龄<65) --验证职工年龄不能小于岁,并且不能大于岁

insert into Worker values('a002005','李芳',15,'副经理',4500,'a002'); insert into Worker values('a002006','李姓',66,'副经理',4500,'a002'); --()定义一个表tbl_Emp_Log(eNO, eSalary, Username, ModiDate);在

3

--职工表上定义修改和插入数据的触发器,

--定义表

create table tbl_Emp_Log( id int identity primary key, eNo char(20), eSalary money, Username char(20), ModiDate Datetime )

--定义插入数据的触发器

create trigger insert_Emp on Worker after insert

as begin insert into tbl_Emp_Log

select 职工号, 工资, User_name(), getDate() from Inserted; end

drop trigger insert_Emp

--验证触发器

insert into Worker values('a0010011','周涛',29,'市场营销员',2000,'a001'); insert into Worker values('a0010010','霍利',28,'市场营销员',2000,'a001');

select * from tbl_Emp_Log; drop table tbl_Emp_Log;

--定义修改工资的触发器

create trigger update_Emp on Worker after update

as if update(工资)

begin declare @eSeleryOld money,@eSeletyNew money select @eSeleryOld=工资from Deleted select @eSeletyNew=工资from Inserted if(@eSeleryOld<>@eSeletyNew)

insert into tbl_Emp_Log select 职工号, 工资, User_name(), getDate() from Inserted; end

drop trigger update_Emp --验证触发器

insert into Worker values('a0010021','莉莉',29,'营销员',3500,'a001'); insert into Worker values('a0010020','李丽',28,'市场营销员',4500,'a001'); update Worker set 工资=5500 where 职工号='a0010021', update Worker set 工资=8500 where 职工号='a0010020', select * from tbl_Emp_Log; drop table tbl_Emp_Log;

4

select *from Worker; select *from Section; --删除表

drop table Worker; drop table Section; use master go

--删除数据库work

drop database work;

4.3 出现的问题:

4.4 解决方案(列出遇到的问题和解决办法,列出没有解决的问题)

:5


数据库完整性实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生字表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: