数据库5关系数据库完整性实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库系统原理
实验报告
实验名称:关系数据库完整性实验任课教师:***
学号:*********
姓名:***
完成日期:2012.11.28
一、实验目的
通过ORACLE的完整性,理解关系数据库的完整性
二、实验内容与步骤
ORACLE环境中通过触发器可以定义为更复杂的完整性约束
例1:通过触发器产生主键值
create sequence ql minvalue 010341416;
create table student(sno number(9) primary key ,sname varchar2(20));
create or replace trigger add_student
before insert on student
for each row
begin
select ql.nextval into :new.sno from dual;
end;
验证触发器:
SQL>insert into student (sname)values(‘刘辉’);
SQL>insert into student (sname)values(‘刘俊波’);
例2:创建一个行级触发器,记录下给个用户对数据库的表进行数据操纵的次数
create or replace trigger audit_student
after delete or insert or update on student
for each row
begin
if deleting then
update audit_student set del =del+1
where user_name=user and table_name='student';
end if;
if inserting then
update audit_student set ins=ins+1
where user_name=user and table_name='student';
end if;
if updating then
update audit_student set upd=upd+1;
where user_name =user and table_name='student';
end if ;
end;
要求:1)定义基本表:
Audit_student(user_name,table_name,del,ins,upt)
2)输入元组,例“SCOTT”,“student”,0,0,0
3)以SCOTT身份登录,对student表进行增加删除和修改操作,之后查看
audit_student表的内容变化。
例3、为教师表Teacher定义完整性规则:“职称(pos)为教授时其工资(sal)不得低于1000元,如果低于1000元,自动改为1000元”。
create or replace trigger update_sal
before insert or update of sal,pos on teacher
for each row
when(new.pos='教授')
begin
if :new.sal<1000 then
:new.sal :=1000;
end if;
end;
要求1)建立教师表Teacher。提示:必须包含pos,sal等属性;
2)输入必要的数据;
3 )定义上述触发器
4)更新职称为教授的元组的工资,按照大于1000和小于1000分别进行操作。
5)插入职称为教授的数据行,按照大于1000和小于1000分别进行操作。
6)理解并解释触发器定义的完整性约束。
三、实验结果与结论
例1、通过触发器产生主键值
SQLWKS> create sequence ql minvalue 010341416;
语句已处理。
SQLWKS> create table student(sno number(9) primary key,sname varchar2(20));
语句已处理。
SQLWKS> create or replace trigger add_student
2> before insert on student
3> for each row
4> begin
5> select ql.nextval into:new.sno from dual;
6> end;
7>
语句已处理。
SQLWKS> insert into student(sname) values('汪何媛');
处理了1 行。
SQLWKS> insert into student(sname) values('刘明杭');
处理了1 行。
SQLWKS> insert into student(sname) values('李昕');
处理了1 行。
SQLWKS> insert into student(sname) values('刘俊');
处理了1 行。
SQLWKS> insert into student(sname) values('蒋帆');
处理了1 行。
验证触发器:
SQLWKS> select * from student
2>
SNO SNAME
---------- --------------------