• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2008-5-13 11:05 | 作者: GOD | 来源: 希赛网 | 查看: 67次 | 进入软件测试论坛讨论

领测软件测试网  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短语)

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: oracle ORACLE Oracle 概念 进阶 数据库 循序渐进

21/212>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网