`

原创 oracle 数据完整性总结<十>

阅读更多
数据完整性
   数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不正确或不一致,那么该数据的完整性可能会遭到破坏,从而给数据库本身的可靠性带来意想不到的问题。
为了维护数据库中的数据完成性,在创建表时通常需要指定一些约束。通过表中的字段(列)定义约束,就可以防止非法数据的插入问题.对约束的定义可以再create table语句中进行,也可以在alter table语句中进行。

什么是约束呢?
   约束是表级的强制规定.根据约束的作用域,约束又可分为表级约束和列级约束两种。
列级约束是指是字段定义的一部分,只能够应用在一个列上.
表级约束是指独立于列的定义,可以应用于一个表中的多个列上。
在oracle系统中定义约束时,通过constraint关键字为约束命名,如果用户没有为约束指定名称,系统会自动建立默认的名称。

总结:
	作用范围:列级约束只能作用在一个列上,而表约束可以作用在多个列上(当然表约束也可以作用在一个列上)。
	定义方式:列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义。
	非空(not null) 约束只能定义在列上


备注:在定义约束时,可以通过指定enable或disable关键字将约束的初始状态设置为激活或禁用状态,默认是激活状态。

定义约束的语法格式1:
CREATE TABLE [schema.]table
	    (column datatype [DEFAULT expr]
		[column_constraint],
		...
		[table_constraint][,...]);

列级约束:
  column [CONSTRAINT constraint_name] constraint_type,
表级约束
  column,...
  [CONSTRAINT constraint_name] constraint_type 
  (column, ...),

约束的分类为:
•	NOT NULL
•	UNIQUE 
•	PRIMARY KEY
•	FOREIGN KEY
•	CHECK
1、	Not null
特点如下:
 	为字段定义not null 约束后,该字段不能为null值
 	Not Null约束只能在列级定义
 	在定义一个表中可以有多个not Null 
2、	unique 
特点如下:
 	如果为字段定义了unique约束,该字段不能够包含重复值
 	unique约束既可以在列级定义,也可以在表级定义。
 	在oracle系统中被定义的unique约束会自动建立一个唯一的索引。
 	同一个字段既可以在其上定义为not null 也可以建立unique约束,(为某个字段可以添加多个约束),注意:如果在一个字段仅定义了unique约束,则该字段可以包含多个null值
   
Unique主要的目的是:是在保证主键列外,其它列的唯一性。
3、	primary key
特点如下:
 	定义为primary key的字段或字段组中不能包含重复值,并且不能为null值.(即满足唯一性,不能为空)
 	在一个表中只能定义一个primary key的约束
 	Oracle会自动为具有primarykey约束的字段添加一个唯一的索引,以及一个not null约束
4、	foreign key
特点如下: 
 	   被定义了foreign key约束的字段的取值只能为相关表中引用的字段的值或null值。
 	foreign key约束既可以在列级定义,也可以在表级定义。
 	定义了foreign key约束的外键字段和被引用的主键字段可以在同一张表中,这种情况称为:’自引用’(构成了自关联关系)
 	对于同一个字段可以同时定义为foreign key约束和not null约束。

注意:外键的类型、尺寸等一定要与主键完全一致。
备注:
   在oracle中级联删除有如下三值:
1、	no action 在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现, 违反完整约束条件的异常信息)
2、	cascade
 在删除一方的时,会把多方所有与1方关联的数据删除掉。
3、	set null
         在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null 否则的话会出现无法更新***为 NULL)。
5、	check   
check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中.check约束有如下特点:
 	  在check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.
 	  Check约束即可以在列级定义,也可以在表级定义
 	  对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和not null约束。


综合案例:
学生信息表
      用户名,用户密码,用户电话,用户邮箱,用户地址.
      教师名称,教师性别,教师职务,教师年龄
      ——————————————————————————————
分析:满足1NF范式(属性不可再分)
      满足2NF范式(非主属性必须完全依赖于任一候选键)
     用户名->用户密码,用户电话,用户邮箱,用户地址.
Stu(sname,stel,semail,saddress)
     用户名—> 教师名称
     教师名称—>用户名
    
    stear(sid,tname,sname)

教师名称—>教师性别,教师职务,教师年龄

Teacher(tname,tsex,ttitle,tage)

  满足3NF(非主属性都不传递依赖于任一候选键)
     
//创建表的语法同时也给表加约束||或者是创建表之后才用alter语句添加约束条件

//第一步切换到管理员权限
SQL> conn system/root;
//第二步创建用户
SQL> create user slj identified by root;
//第三步为用户分配角色权限
SQL> grant connect,resource to slj;//connect 连接 resources 创建表的权限 详细参考第二次oracle课程
//切换到相应的用户
SQL> conn slj/root;
//采用create语句创建表
SQL> create table stu(
  2    sname varchar2(20) primary key,
  3    stel varchar2(11) not null,
  4    semail varchar2(40),
  5    saddress varchar2(50)
  6  );
 
Table created
SQL> create table teacher(
  2     tname varchar2(20) primary key,
  3     tsex varchar2(2),
  4     ttitle varchar2(40),
  5     tage number(3) check(tage<100 and tage>20)
  6  );
 
Table created
SQL> create table stear(
  2     sid number(10) primary key,
  3     tname varchar2(20) references teacher(tname),
  4     sname varchar2(20) references stu(sname)
  5  );
 
Table created
SQL> commit;

//查询约束条件
SQL> select * from user_constraints;
//查询被约束的列
SQL> select * from user_cons_columns;


  
以上内容归redarmy_chen创建,如需转载请附带出处,如有疑问请发送邮件至redarmy_chen@qq.com
分享到:
评论

相关推荐

    Oracle 主要配置文件介绍

    系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库&lt;br&gt; 相关的环境变量就定义在/etc/profile 文件中 如下所示&lt;br&gt; export ORACLE_BASE=/u01/app/oracle&lt;br&gt; export ORACLE_HOME=$ORACLE_BASE/...

    在AIX上快速部署Oracle 9i

    &lt;br&gt;# lsdev -Cc aio &lt;br&gt;如果输出是"Available"则没问题,如果是"Defined"的话,通过使用 &lt;br&gt;# smit chaio &lt;br&gt;把"STATE to be configured at system restart"更改为"Available"&lt;br&gt;&lt;br&gt;想要完整的就下载下来吧。

    Oracle Concepts中英文对照版(10g R2).chm

    18 章,分区表及分区索引 &lt;br&gt;Chapter 19, Content Management 第 19 章,内容管理 &lt;br&gt;Chapter 20, Database Security 第 20 章,数据库安全 &lt;br&gt;Chapter 21, Data Integrity 第 21 章,数据完整性 &lt;br&gt;Chapter 22,...

    oracle开发使用手册.part2

    Oracle 8.x调整问题.PDF&lt;br&gt;21-管理数据库存储.PDF&lt;br&gt;22-鉴别资源密集型用户.PDF&lt;br&gt;23-安全管理.PDF&lt;br&gt;24-备份与恢复.PDF&lt;br&gt;25-完整性管理.PDF&lt;br&gt;26-管理员使用的SQLPlus.PDF&lt;br&gt;27-Oracle企业管理器.PDF&lt;br&gt;28...

    oracle开发使用手册.part1

    Oracle 8.x调整问题.PDF&lt;br&gt;21-管理数据库存储.PDF&lt;br&gt;22-鉴别资源密集型用户.PDF&lt;br&gt;23-安全管理.PDF&lt;br&gt;24-备份与恢复.PDF&lt;br&gt;25-完整性管理.PDF&lt;br&gt;26-管理员使用的SQLPlus.PDF&lt;br&gt;27-Oracle企业管理器.PDF&lt;br&gt;28...

    oracle开发使用手册.part3

    Oracle 8.x调整问题.PDF&lt;br&gt;21-管理数据库存储.PDF&lt;br&gt;22-鉴别资源密集型用户.PDF&lt;br&gt;23-安全管理.PDF&lt;br&gt;24-备份与恢复.PDF&lt;br&gt;25-完整性管理.PDF&lt;br&gt;26-管理员使用的SQLPlus.PDF&lt;br&gt;27-Oracle企业管理器.PDF&lt;br&gt;28...

    Oracle9i AIX5L上的安装、建库与升级笔记

    Oracle9i AIX5L上的安装、建库与升级笔记&lt;br&gt;内容如下:&lt;br&gt;1、 用root用户完成下面的操 &lt;br&gt;&lt;br&gt;添加oracle用户和组: &lt;br&gt;&lt;br&gt; 你可以使用命令或smit 来完成,我一般都是只创建dba组。 &lt;br&gt;&lt;br&gt;创建相关目录,并...

    Oracle Concepts 中文英文对照版 (10g R2)

    18 章,分区表及分区索引 &lt;br&gt;Chapter 19, Content Management 第 19 章,内容管理 &lt;br&gt;Chapter 20, Database Security 第 20 章,数据库安全 &lt;br&gt;Chapter 21, Data Integrity 第 21 章,数据完整性 &lt;br&gt;Chapter 22,...

    ORACLE应用中常见的傻瓜问题1000问-1

    ORACLE应用中常见的傻瓜问题1000问&lt;br&gt;&lt;br&gt; 14. 如何查看系统被锁的事务时间?&lt;br&gt;&lt;br&gt; select * from v$locked_object ;&lt;br&gt;&lt;br&gt; 15. 如何以archivelog的方式运行oracle。&lt;br&gt;&lt;br&gt; init.ora &lt;br&gt;&lt;br&gt; log_...

    精通Oracle.10g.PLSQL编程

    访问Oracle&lt;br&gt;6.1 检索单行数据&lt;br&gt;6.2 操纵数据&lt;br&gt;6.2.1 插入数据&lt;br&gt;6.2.2 更新数据&lt;br&gt;6.2.3 删除数据&lt;br&gt;6.2.4 SQL游标&lt;br&gt;6.3 事务控制语句&lt;br&gt;6.4 习题&lt;br&gt;第7章 编写控制结构&lt;br&gt;7.1 条件分支...

    Professional Oracle Programming

    &lt;br&gt;Professional Oracle Programming&lt;br&gt;&lt;br&gt;作者:Rick Greenwald, Robert ...&lt;br&gt;...&lt;br&gt;Oracle owns sixty percent of the commercial database market &lt;br&gt;&lt;br&gt;Provides full coverage of the latest Oracle version...

    Oracle 性能调整(真正由ORACLE甲骨文出品)

    – 解决性能问题的步骤 &lt;br&gt; 分析症状 &lt;br&gt; 确定问题范围 &lt;br&gt; 参数调整or &lt;br&gt; 结构调整or &lt;br&gt;&lt;br&gt; 应用调整 &lt;br&gt; 性能监控 &lt;br&gt;&lt;br&gt;Shared Pool &lt;br&gt; – SHARED_POOL_SIZE 控制共享SQL缓冲存储区和数据字 &lt;br&gt; ...

    maven添加oracle依赖失败问题的处理方法

    由于Oracle授权问题,Maven3不提供oracle JDBC driver  ... &lt;!-- oracle --&gt; &lt;dependency&gt; &lt;groupId&gt;com.oracle&lt;/groupId&gt; &lt;artifactId&gt;ojdbc6&lt;/artifactId&gt; &lt;version&gt;11.2.0.3&lt;/version&gt; &lt;/depe

    C#编程经验技巧宝典

    98&lt;br&gt;&lt;br&gt;0153 如何自定义数字小数点左边分组位数 98&lt;br&gt;&lt;br&gt;0154 格式化输入数据为货币格式 99&lt;br&gt;&lt;br&gt;0155 如何计算两个整数的乘积 99&lt;br&gt;&lt;br&gt;0156 如何将二进制数转换为十进制数 100&lt;br&gt;&lt;br&gt;0157 如何...

    Oracle Olap开发备忘录

    9i低版本需要注意&lt;br&gt;&lt;br&gt;oracle.express.mdm.MdmMetadataProvider与&lt;br&gt;&lt;br&gt;oracle.olapi.metadata.mdm.MdmMetadataProvider之间的转换,可使用&lt;br&gt;&lt;br&gt;oracle.express.mdm.MdmMetadataProvider....

    Oracle Data Provider for .NET (ODP.NET)

    &lt;br&gt; &lt;br&gt; 下载包括&lt;br&gt; &lt;br&gt; Oracle Developer Tools for Visual Studio .NET 2003 10.2.0.2.20 &lt;br&gt;&lt;br&gt; Oracle Developer Tools for Visual Studio 2005 10.2.0.2.20 &lt;br&gt;&lt;br&gt; Oracle Data Provider for .NET 1....

    深入浅出Oracle分析函数

    目录&lt;br&gt;Oracle开发专题之:分析函数(OVER) &lt;br&gt;Oracle开发专题之:分析函数2(Rank, ...报表函数 &lt;br&gt;Oracle开发专题之:分析函数总结 &lt;br&gt;Oracle开发专题之:26个分析函数 &lt;br&gt;PLSQL开发笔记和小结 &lt;br&gt;分析函数简述

    Oracle驱动包,ojdbc14_g

    maven的可以打到本地仓库 ...引用方式: &lt;dependencies&gt; &lt;... &lt;groupId&gt;com.oracle&lt;/groupId&gt; &lt;artifactId&gt;ojdbc14&lt;/artifactId&gt; &lt;version&gt;10.2.0.5.0&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt;

    Oracle 9i Java程序设计——使用PL/SQL和Java的解决方案

    &lt;br&gt;原书名:Oracle 9i Java Programming&lt;br&gt;&lt;br&gt;Oracle 9i Java程序设计——使用PL/SQL和Java的解决方案 &lt;br&gt;&lt;br&gt;【原出版社】 Wrox Press &lt;br&gt;【作 者】Bjarki Holm,John Carnell等 &lt;br&gt;【译 者】 康博 &lt;br&gt;【丛 ...

Global site tag (gtag.js) - Google Analytics