数据库实验报告 数据控制(完整性部分) 实验四
- 格式:doc
- 大小:237.00 KB
- 文档页数:10
题目:实验4 数据控制(完整性部分)
姓名:* * * 日期:2012年4月26日
一、 实验目的
熟悉通过SQL对数据进行完整性控制。完成作业的上机练习。
二、 实验平台
在实验1中安装的RDBMS及其交互工具。
三、 实验内容和要求
使用SQL对数据进行完整性控制(三类完整性、check短语、constraint字句、触发器)。用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。根据以下要求认真填写实验报告,记录所有的实验用例。
四、 实验报告
1、 三类完整性,check短语。
关系模型的实体完整性在create table 中用primary key 定义。定义主码的方法分为定义为列级约束条件和定义为表级约束条件两种。对多个属性构成的码只能用表级约束条件。
习题5的第6题,要求定义实体完整性(主码)、参照完整性(外码)、check语句,用户定义的完整性(not null)。
代码如下:
create table 职工
( Dno numeric(4) primary key,
Dname char(20) unique,
Dbossname char(20),
Dnum numeric(4)
);
create table 职工
( Eplno smallint primary key,
Eplname char(20) not null,
Eplage smallint check (Eplage<=60),
job char(9),
Sal numeric(7,2),
Dno numeric(4),
foreign key (Dno) references 部门(Dno)
);
2、constraint 字句
完整性约束命名字句:
create table student(
SNO NUMERIC(5)
CONSTRAINT C1 CHECK (SNO BETWEEN 90000 AND 99999),
SNAME VARCHAR(20)
CONSTRAINT C2 NOT NULL,
SAGE NUMERIC(3)
CONSTRAINT C3 CHECK (SAGE < 30),
SSEX VARCHAR(2)
CONSTRAINT C4 CHECK (SSEX IN ('男','女')),
CONSTRAINT StudentKey PRIMARY KEY(SNO));
1、 触发器
(1)创建触发器:(after 行级触发器)
create trigger insert_or_update_Sal on 职工
after insert as update 职工set Sal=12000
where (job='软件工程师')and (Sal<12000)
激活触发器:
insert
into 职工
values('24','小露','21','软件工程师','10000','8')
(2)插入触发器:
create trigger insert_0table on 职工
for insert
as
declare @Eplno smallint
select @Eplno=Eplno from inserted
update 职工set job='软件工程师' where Eplno=@Eplno
激活触发器如下图所示:
(3)创建触发器:(instead 表级触发器)
create trigger J_update
on J
instead of update
as
begin
raiserror('J表的数据不能被修改!',16,10)
end
激活触发器:
update J
set Jname='大众'
where Jno='J1'
执行顺序为:执行SQL“update”语句—>执行触发器
删除触发器:
代码:drop trigger J_update;
执行结果如下:
3、违反完整性约束条件时,系统处理如下:
4、实验小结:
(1) 遇到的问题: 创建before行级触发器时出现问题
create trigger insert_or_update_Sal
before insert or update on 职工
for each row
as begin
if(new.job='软件工程师')and (new.Sal<12000) then
new.Sal:= 12000;
end if;
end;
解决方案:待解决??