首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>oracle>正文

循序渐进讲解Oracle数据库的完整性概念

http://www.oklinux.cn  2008-05-05  赛迪网 yashi  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

一、Oracle中的实体完整性

Oracle在CREATE TABLE语句中提供了PRIMARY KEY子句,供用户在建表时指定关系的主码列。例如,在学生-选课数据库中,要定义Student表的Sno为主码,可使用如下语句: CREATE TABLE student

(sno NUMBER(8),

sanme VARCHAR(20),

sage NUMBER(20),

CONSTRAINT pk_sno PRIMARY KEY(sno));

其中,PRIMARY KEY(Sno)表示是Student表的主码。PK_SNO是此主码约束名。

若要在SC表中定义(Sno,Cno)为主码,则用下面语句建立SC表: CREATE TABLE sc

(sno NUMBER(8),

cno NUMBER(2),

grade NUMBER(2),

CONSTRAINT pk_sc PRIMARY KEY(sno,cno));

用PRIMARY KEY语句定义了关系的主码后,每当用户程序对主码列进行更新操作时,系统自动进行完整性检查,凡操作使主码值为空或使主码值在表中不唯一,系统拒绝此操作,从而保证了实体完整性。

二、Oracle中的参照完整性

Oracle的CREATE TABLE语句也可以定义参照完整性规则,即用FOREIGN KEY子句定义哪些列为外码列,用REFERENCES子句指明这些外码相应于哪个表的主码,用ON DELETE CASCADE子句指明在删除被参照关系的元组时,同时删除参照关系中相应的远祖。

例如,使用如下SQL语句建立EMP表: CREATE TABLE emp

(empno NUMBER(4),

ename VARCHAR(10),

job VARCHAR2(9),

mgr NUMBER(4),

sal NUMBER(7,2),

deptno NUMBER(2),

CONSTRAINT fk_deptno

FOREIGN KEY(deptno)

REFERENCES dept(deptno));

则表明EMP是参照表,DEPT为其被参照表,EMP表中Deptno为外码,它相应于DEPT表中的主码Deptno。当删除或修改DEPT表中某个元组的主码时要检查EMP中是否有元组的DEPTNO值等于DEPT中要删除的元组的Deptno值,如没有,接受此操作;否则系统拒绝这一更新操作。

如果用如下SQL语句建立EMP表: CREATE TABLE emp

(empno NUMBER(4),

ename VARCHAR(10),

job VARCHAR2(9),

mgr NUMBER(4),

sal NUMBER(7,2),

deptno NUMBER(2),

CONSTRAINT fk_deptno

FOREIGN KEY(deptno)

REFERENCES dept(deptno)

ON DELETE CASCADE);

当要修改DEPT表中的Deptno值时,先要检查EMP表中有无元组的Deptno值与之对应,若没有,系统接受这个修改操作,否则,系统拒绝此操作。

当要删除DEPT表中某个元组时,系统也要检查EMP表,若找到相应元组则将它们也随之删除。

三、Oracle中用户定义的完整性

除实体完整性和参照完整性外,应用系统中往往还需要定义与应用有关的完整性限制。例如:要求某一列的值不能取空值,要在表中是唯一的,要在某个取值范围中等。Oracle允许用户在建表时定义下列完整性约束:

列值非空(NOT NULL短语)

列值唯一(UNIQUE短语)

检查列值是否满足一个布尔表达式(CHECK短语)

例1 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码。 CREATE TABLE dept

(deptno NUMBER,

dname VARCHAR(9) CONSTRAINT u1 UNIQUE,

loc VARCHAR(10),

CONSTRAINT pk_dept PRIMARY KEY (deptno));

其中CONSTRAINT U1 UNIQUE表示约束名为U1,该约束要求Dname列值唯一。

例2 建立学生登记表Student,要求学号在90000~99999之间,年龄<29,性别只能是“男”或“女”,姓名非空。 CREATE TABLE student

(sno NUMBER(5) CONSTRAINT c1 CHECK (sno BETWEEN 90000 AND 99999),

sname VARCHAR(20) CONSTRAINT c2 NOT NULL,

sage NUMBER(3) CONSTRAINT c3 CHECK (sage<29),

ssex VARCHAR(2) CONSTRAINT c4 CHECK(ssex IN('男','女')));

例3 建立职工表EMP,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列Sal与扣除项Deduct之和。 CREATE TABLE emp

(eno NUMBER(4),

ename VARCHAR(10),

job VARCHAR(8),

sal NUMBER(7,2),

deduct NUMBER(7,2),

deptno NUMBER(2),

共2页: 上一页 1 [2] 下一页

上一篇:如何使用DBMS_REPAIR检测和修补数据坏块   下一篇:讲解Oracle数据库提供的多种安全性措施

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·讲解Oracle数据库提供的多种安全性措施
·如何使用DBMS_REPAIR检测和修补数据坏块
·用一个实例讲解Oracle的自定义聚集函数
·带你快速了解Oracle数据库提供的恢复机制
·Oracle数据库索引聚簇与哈希聚簇使用指南
·讲解Oracle数据库应用程序中RAID的级别
·数据库管理员日常工作中必备的sql列表
·如何在Oracle中释放flash_recovery_area
·如何将Oracle数据库的普通表转换成分区表
·Linux主机下配置Oracle 10G自动启动过程记
·Ubuntu上安装Oracle 10G及相关配置
·数据库中判断一个字符串内是否含有中文
·Oracle中SQL语句执行效率的查找与解决
·教你轻松掌握数据库链路的建立和使用
·超大型Oracle数据库应用系统的设计方法
·大型MIS软件的开发必须重视数据库设计
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·关于Oracle将目标数据库设为归档模式应
·Linux下OCI基础:配置Instant Client连
·Oracle中被锁定的解决办法
·Oracle 11G 无法连接到数据库实例故障
·浅谈创建Oracle数据库连接的两种方法
·如何从Oracle技术支持获得更多
·Oracle数据库中安全知识介绍
·Oracle推出Linux服务并不成功
·Oracle专用服务器的内存结构分布原则
·如何在RAC环境下修改Oracle字符集
·Oracle过程中执行动态SQL或DDL语句
·2008年Oracle错误、备份、升级等最热门
  阅读排行
·详解远程SHELL下安装配置RedHat ES 5的
·Ubuntu上安装Oracle 10G及相关配置
·Oracle高级复制(同步复制)配置步骤详细
·如何修改遗失的MySQL的ROOT用户密码
·Redhat Linux AS4 安装Oracle 10g(包括
·Linux下OCI基础:配置Instant Client连
·解决启动数据库时发生的ORA-12528错误
·在 Oracle Enterprise Linux 上升级到
·Oracle 10g表空间创建的完整步骤
·centos 5.0中成功安装Oracle10g (1020
·如何在RAC环境下修改Oracle字符集
·Oracle数据库导入导出方法的个人总结
·巧用Oracle执行计划机制提高查询性能
·Oracle 10g 在AIX 5.3上安装过程笔记
·Linux真机环境Oracle 10gR2 RAC 安装完
网摘收藏: