数据库5关系数据库完整性实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

---------- --------------------

相关文档
最新文档