广东工业大学数据库实验.docx

上传人:b****2 文档编号:24539016 上传时间:2023-05-28 格式:DOCX 页数:19 大小:448.20KB
下载 相关 举报
广东工业大学数据库实验.docx_第1页
第1页 / 共19页
广东工业大学数据库实验.docx_第2页
第2页 / 共19页
广东工业大学数据库实验.docx_第3页
第3页 / 共19页
广东工业大学数据库实验.docx_第4页
第4页 / 共19页
广东工业大学数据库实验.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

广东工业大学数据库实验.docx

《广东工业大学数据库实验.docx》由会员分享,可在线阅读,更多相关《广东工业大学数据库实验.docx(19页珍藏版)》请在冰豆网上搜索。

广东工业大学数据库实验.docx

广东工业大学数据库实验

课程实验

课程名称_数据库课程实验___

题目名称_数据库完整性与安全性_

学生学院_______计算机_________

专业班级____网络工程一班_______

学号____3109006466_________

学生姓名________韩江___________

指导教师_______郝彦军_________

 

2012年6月

目录

一、实验目的2

二、实验平台……………………………………………………………………………………………………….4

1、硬件............................................................................................................................................................4

2、操作系统...................................................................................................................................................4

3、数据库管理系统:

..................4

4、可视化管理工具:

...................................................................................................................................4

三、数据库完整性概述………………………………………………………………………………………….4

1、数据库完整性概念......................................................................................................................................4

2、Oracle的完整性技术综述..........................................................................................................................4

四、实验内容2

【例1】2

【例2】4

【例3】4

【例4】6

【例5】7

【例6】8

【例7】8

【例8】9

【例9】10

【例10】11

【例11】13

【例12】14

【例13】14

【例14】14

【例15】15

【例16】15

【例17】16

【例18】16

【例19】17

【例20】19

【例21】20

五、实验总结20

一、实验目的

  填写参考实验三指导书

二、实验平台

1、硬件:

AMD4核

2、操作系统:

redhat5.4

3、数据库管理系统:

oracle10gR2

4、可视化管理工具:

Shell

填写实验一的结果

三、数据库完整性概述

1、数据库完整性概念

……

2、Oracle的完整性技术综述

……

4、实验内容

连接数据库成功

【例1】将Student表中的Sno定义为主码

在列级定义主码

createtableStudent

(Snochar(9)primarykey,

Snamechar(20)notnull,

Ssexchar

(2),

Sagesmallint,

Sdeptchar(20)

);

在表级定义主码

createtableStudent

(Snochar(9),

Snamechar(20)notnull,

Ssexchar

(2),

Sagesmallint,

Sdeptchar(20),

primarykey(Sno)

);

【例2】将SC表中的Sno,Cno属性组定义为码

对于属性组,只能在表级定义主码

createtableSC

(Snochar(9)notnull,

Cnochar(4)notnull,

Gradesmallintnotnull,

primarykey(Sno,Cno)

);

【例3】定义SC表中的参照完整性

createtableSC

(Snochar(9)notnull,

Cnochar(4)notnull,

Gradesmallint,

primarykey(Sno,Cno),

foreignkey(Sno)referencesStudent(Sno),

foreignkey(Cno)referencesCourse(Cno)

);

【例4】显式说明参照完整性的违约处理示例

createtableSC

(Snochar(9)notnull,

Cnochar(4)notnull,

Gradesmallint,

primarykey(Sno,Cno),

foreignkey(Sno)referencesStudent(Sno)

ondeletecascade

onupdatecascade,

foreignkey(Cno)referencesCourse(Cno)

ondeletenoaction

onupdatecascade

);

操作失败!

原因:

oracle中不支持onupdatecascade操作。

【例5】在定义SC表时,说明Sno,Cno,Grade属性不能取空值。

createtableSC

(Snochar(9)notnull,

Cnochar(4)notnull,

Gradesmallintnotnull,

primarykey(Sno,Cno)

);

【例6】建立部门表DEPT,要求部门名称Dname列值取唯一,部门编号Deptno列为主码。

createtableDEPT

(Deptnonumeric

(2),

Dnamechar(9)unique,

Locationchar(10),

primarykey(Deptno)

);

【例7】Student表的Ssex只允许取’男’或’女’。

createtableStudent

(Snochar(9)primarykey,

Snamechar(8)notnull,

Ssexchar

(2)check(Ssexin('男','女')),

Sagesmallint,

Sdeptchar(20)

);

【例8】SC表中的Grade的值应该在0和100之间。

createtableSC

(Snochar(9)notnull,

Cnochar(4)notnull,

Gradesmallintcheck(Grade>=0andGrade<=100),

primarykey(Sno,Cno),

foreignkey(Sno)referencesStudent(Sno),

foreignkey(Sno)referencesCourse(Cno)

);

【例9】当学生的性别是男时,其名字不能以Ms.开头。

createtableStudent

(Snochar(9),

Snamechar(8)notnull,

Ssexchar

(2),

Sagesmallint,

Sdeptchar(20),

primarykey(Sno),

check(Ssex='女'orSnamenotlike'Ms.%')

);

【例10】建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是’男’或’女’。

createtableStudent

(Snonumeric(6)

constraintc1check(Snobetween90000and99999),

Snamechar(20)

constraintc2notnull,

Sagenumeric(3)

constraintc3check(Sage<30),

Ssexchar

(2)

constraintc4check(Ssexin('男','女')),

constraintStudentKeyprimarykey(Sno)

);

【例11】建立教师表TEACHER,要求每个教师的应发工资不低于3000元。

应发工资就是实发工资列Sal与扣除项Deduct之和。

createtableTEACHER

(Enonumeric(4)primarykey,

Enamechar(10),

Jobchar(8),

Salnumeric(7,2),

Deductnumeric(7,2),

Deptnonumeric

(2),

constraintEMPFkeyforeignkey(Deptno)referencesDEPT(Deptno),

constraintccheck(Sal+Deduct>=3000)

);

【例12】去除【例10】Student表中对性别的限制。

altertableStudentdropconstraintc4;

【例13】修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄小于30改为小于40。

可先删除原来的约束条件,再增加新的约束条件。

altertableStudentdropconstraintc1;

【例14】建立一个性别域,并声明性别域的取值范围。

createdomainGenderDomainchar

(2)

check(valuein('男','女'));

创建失败!

原因:

Oracle不支持创建域,域是指属性的取值范围。

方法:

oracle也不支持枚举类型ENUM。

但是可以用check来对属性的值进行约束。

下面使用check建造一个例子:

createtableStudent

(Snonumeric(6)primarykey,

Snamechar(20)notnull,

Ssexchar

(2)check(Ssexin('男','女'))

);

【例15】建立一个性别域GenderDomain,并对其中的限制命名。

createdomainGenderDomainchar

(2)

constraintGDcheck(valuein(‘男’,’女’));

该语句不能执行,oracle不支持域的建立!

回看【例14】结论。

【例16】删除域GenderDomain的限制条件GD.

alterdomainGenderDomain

dropconstraintGD;

该语句不能执行,oracle不支持域的建立!

回看【例14】结论。

【例17】在GenderDomain上增加限制条件GDD.

alterdomainGenderDomain

addconstraintGDDcheck(valuein(‘1’.’0’));

该语句不能执行,oracle不支持域的建立!

回看【例14】结论。

【例18】定义一个BEFORE行级触发器,为教师表Teacher定义完整性规则“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”。

createtriggerInsert_Or_Update_Sal

beforeinsertorupdateonTeacher

foreachrow

asbegin

if(new.Job='教授')and(new.Sal<4000)then

new.Sal:

=4000;

endif;

end;

创建失败!

原因:

1、oracle语法不支持在建立触发动作体之前加上’AS’字符。

2、oracle在新建的变量前需要加:

,如:

new.job=’教授’。

把书本例子修改如下:

createorreplacetriggerupdate_sall

beforeupdateonteacher

foreachrow

begin

if(:

new.job='教授')and(:

new.sal<4000)then

:

new.sal:

=4000;

endif;

end;

/

【例19】定义AFTER行级触发器,当教师表Teacher的工资发生变化后就自动在工资变化表Sal_log中增加一条相应记录。

首先建立工资变化表。

createtableSal_log

(Enonumeric(4)referencesteacher(Eno),

Salnumeric(7,2),

Usernamechar(10),

Datestimestamp

);

课本中修改语法后的例子:

createorreplacetriggerInsert_sal

afterinsertonTeacher

foreachrow

begin

insertintoSal_log(eno,sal,username,dates)values(

:

new.Eno,:

new.Sal,user,sysdate);

end;

/

课本中修改语法后的例子:

createtriggerUpdate_Sal

afterupdateonTeacher

foreachrow

begin

if(:

new.Sal<>:

old.Sal)theninsertintoSal_logvalues(

:

new.Eno,:

new.Sal,user,sysdate);

endif;

end;

【例20】执行修改某个教师工资的SQL语句,激活上述定义的触发器。

updateTeachersetSal=800whereEname=’陈平’;

先向Teacher表中插入一条记录:

insertintoTeachervalues(1234,’陈平’,’程序员’,400.00,null,null);

然后在更改某个教师工资的SQL语句测试:

【例21】删除教师表Teacher上的触发器Insert_Sal。

droptriggerInsert_SalonTeacher;

操作失败!

原因:

Oracle删除触发器的SQL语法形如:

droptrigger触发器名;

如:

droptriggerinsert_sal;

五、实验总结

1、不能通过测试的例子:

【例4】【例14】【例15】【例16】【例17】【18】【19】【21】

2、结论

在数据库完整性方面,oracle数据管管理系统对标准SQL不完全支持。

如:

Oracle中不支持onupdatecascade操作。

Oracle不支持创建域,也不支持枚举类型ENUM。

但是可以用check来对属性的值进行约束。

Oracle语法不支持在建立触发动作体之前加上’AS’字符,oracle在新建的变量前需要加:

,如:

new.job=’教授’。

Oracle删除触发器的SQL语法形如:

droptrigger触发器名。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1