报课、招生咨询电话:010-51268840/41

首页 > 计算机考试 > 水平考试 >
→论坛登陆 用户名  密码  
数据库进阶:循序渐进讲解Oracle数据库的完整性概念

作者: 发布时间:2008-05-07 10:41:47 来源:育路计算机考试频道
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),
  CONSTRAINT c1 CHECK (sal + deduct <= 3000));

  在Oracle中,除列值非空、列值唯一、检查列值是否满足一个布尔表达式外,用户还可以通过触发器(Trigger)来实现其他完整性规则。所谓数据库触发器,就是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发器,在核心层进行集中的完整性控制。

  定义数据库触发器的语句是CREATE TRIGGER。

  例4 为教师表Teacher定义完整性规则“教授的工资不得低于1000元,如果低于1000元,自动改为1000元”。 CREATE 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;

  综上所述,Oracle提供了CREATE TABLE语句CREATE TRIGGER语句定义完整性约束条件,其中用CREATE TABLE语句可以定义很复杂的完整性约束条件。完整性约束条件一旦定义好,Oracle会自动执行相应的完整性检查,对于违反完整性约束条件的操作或者拒绝执行或者执行事先定义的操作。

    育路网
 
 
                                        
评论】【加入收藏夹】【 】【打印】【关闭
育路网2007年夏令营联展
 更多有关新闻:
 
·[作文雅思写作高分必读:小作文句子模 ·[资讯中心湖北:2008上半年英语等级考试(P
·[水平考试数据库进阶:循序渐进讲解Oracle ·[水平考试数据库基础:用一个实例讲解Orac
·[复习指导高级会计师考试《高级会计实务》 ·[水平考试数据库进阶:超大型Oracle数据库
·[复习指导MBA英语阅读理解疑难句子解析(三 ·[水平考试数据库进阶:循序渐进讲解数据表
·[复习指导高级会计师考试《高级会计实务》 ·[水平考试数据库相关:大型MIS软件的开发必
·[复习指导MBA英语阅读理解疑难句子解析(二 ·[水平考试数据库进阶:ERP管理软件数据库系
·[复习指导MBA英语阅读理解疑难句子解析(一 ·[水平考试数据库进阶:SQLServer数据库多种
·[水平考试数据库相关:远程连接SQLServer2 ·[考试动态2009年MBA报考须知
发表评论
用户名: 密码:
验证码: 匿名发表
课程搜索:
选择分类:
课程关键字:
课程 学校
 2008年首都高校秋季招生
北京理工大学2008年招生简章
北京文理研修学院2008年招生简章
北京建设大学2008年招生简章
北京中山学院2008年招生简章
北京城市学院2008年招生简章
培黎职业学院2008年招生简章
北京金融学院2008年招生简章
北京吉利大学2008年招生简章
北方工商管理学院2008年招生简章
 本周推荐课程
·初中起点雅思半年脱产 ·启德雅思6分冲刺课程
·新概念1+2册慢速精讲课 ·环球新托福100分强化
·北文王长喜四级强化班 ·英语四、六级培训课程
·海文考研数学课程 ·海文考研英语课程
·北大企业管理高级研修班 ·清华企业领导人研修班
·中美高中生交换项目 ·北工大中加学院2+2本科
·劳动和社会保障部物流师 ·物业管理师职业培训
·市场营销经理国际资格 ·现场管理实务培训
清华大学留学
中法管理硕士预科班
课程咨询热线:010-51268840 51268841
 最新新闻
·广东佛山招考公务员面试邀请家长旁听
·广东佛山招考公务员面试邀请家长旁听
·留学新西兰费用知多少?
·专家建议:去澳洲留学最好从高中开始
·台湾兴起大陆考证热 大学推"考证团"团费约十
·2008年5月10日雅思口语预测
·北京考生5月12日起填报高考志愿
·北京08年自学考试举办网上咨询活动通知
·北京08年自学考试举办网上咨询活动通知
·北京08年自学考试举办网上咨询活动通知
 育路社区            进入>>
 
学员报名服务中心: 北京北三环西路32号恒润中心1806(交通位置图
咨询电话:北京- 010-51268840/41 传真:010-51418040 上海-021-64392659、64397431
育路网-中国新锐教育社区: 北京站 | 上海站 | 郑州站| 武汉站
本站法律顾问: 邱清荣律师
北京育路互联科技有限公司版权所有 | 京ICP备05012189号