1、数据完整性

数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不正确或不一致,那么该数据的完整性可能会遭到破坏,从而给数据库本身的可靠性带来意想不到的问题。

为了维护数据库中的数据完成性,在创建表时通常需要指定一些约束。通过表中的字段(列)定义约束,就可以防止非法数据的插入问题.对约束的定义可以再create table语句中进行,也可以在alter table语句中进行。

2、约束

约束是表级的强制规定.根据约束的作用域,约束又可分为表级约束和列级约束两种。

  • 列级约束是指是字段定义的一部分,只能够应用在一个列上
  • 表级约束是指独立于列的定义,可以应用于一个表中的多个列上

在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(一个表多个列同时定义not null)

(2).unique

特点如下:

如果为字段定义了unique约束,该字段除NULL值外不能够包含重复值
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中级联删除有如下三值:

  • no action 在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现, 违反完整约束条件的异常信息)
  • cascade 在删除一方的时,会把多方所有与1方关联的数据删除掉
  • set null 在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null否则的话会出现无法更新*为 NULL)

(5).check

check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中。

check约束有如下特点:

在check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.

Check约束即可以在列级定义,也可以在表级定义

对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和not null约束。

3、综合案例

学生信息表

用户名,用户密码,用户电话,用户邮箱,用户地址.

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

分析:满足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(  sname varchar2(20) primary key,  stel varchar2(11) not null,  semail varchar2(40),  saddress varchar2(50)  );  Table created
SQL> create table teacher(  tname varchar2(20) primary key,  tsex varchar2(2),  ttitle varchar2(40),  tage number(3) check(tage<100 and tage>20)  );  Table created
SQL> create table stear(  sid number(10) primary key,  tname varchar2(20) references teacher(tname),  sname varchar2(20) references stu(sname)  );  Table created
SQL> commit;  //查询约束条件
SQL> select * from user_constraints;
//查询被约束的列
SQL> select * from user_cons_columns;

参考文献:redarmy_chen,http://redarmychen.iteye.com/blog/1023112

Oracle数据完整性学习笔记相关推荐

  1. oracle buffer block,8 Oracle深度学习笔记——BUFFER CACHE深入一

    8.Oracle深度学习笔记--BUFFER CACHE深入一 最近项目一直和ORACLE死磕,感觉总是找不到出口,只能多看书少说话了. 先记录多少是多少吧! BUFFER CACHE在ORACLE的 ...

  2. oracle数据库的model,Oracle 11g学习笔记–model子句

    Oracle 11g学习笔记–model子句 oracle 10g中新增的model子句可以用来进行行间计算.model子句允许像访问数组中元素那样访问记录中的某个列,这就提供了诸如电子表格计算之类的 ...

  3. Oracle 10g学习笔记(一)

    前言 很不好意思的坦白本人是刚刚学习oracle的菜鸟,以下内容是节取的书中一些值得注意的事项,因为只涉及oracle最初级的知识,并没有太深的内容,希望各位oralce高手们能够帮忙指点指点. Or ...

  4. 【Oracle Hint】Oracle Hint学习笔记【一】

    一.Oracle Hint的一些基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer). 它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划. Oracl ...

  5. 2 Oracle深度学习笔记 内存架构之UGA

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 2.Or ...

  6. 2.Oracle深度学习笔记——内存架构之UGA

    2.Oracle深度学习笔记--内存架构之UGA 欢迎转载,转载请标明出处:  http://blog.csdn.net/notbaron/article/details/50558136 UGA是回 ...

  7. adg oracle,【学习笔记】Oracle ADG搭建与配置 windows平台11G ADG搭建与测试

    [学习笔记]Oracle ADG搭建与配置 windows平台11G ADG搭建与测试 时间:2016-10-26 20:09   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷 ...

  8. oracle goldengate学习笔记,【学习笔记】Oracle goldengate monitor使用笔记

    天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle数据库goldengate monitor的使用笔记. 本站文章除注明转载外,均为本站原创: 转载自love wife & lo ...

  9. 34.Oracle深度学习笔记——12C的AWR初步解读

    34.Oracle深度学习笔记--12C的AWR初步解读 关于AWR,蛤蟆也经常看.因为经常看别人给出的建议,很难有深刻体会.对此,计划花费几个晚上时间好好体会一把并记录下来.此处以单实例为例.列出目 ...

最新文章

  1. Java Websocket实例【服务端与客户端实现全双工通讯】
  2. 世界大学排名:12所中国大学科研实力进百强
  3. 词云(WordCloud)参数详情
  4. GDCM:gdcm::String的测试程序
  5. [bash] 打包某目录(可以是绝对路径)下的指定扩展名的文件
  6. Linux使用RSA实现免密登录(原理)
  7. pbl和sbl_谈PBL和SBL教学法结合模式
  8. ARM Cotex-M4数据手册4---System Control
  9. Oracle_JOB参数详解
  10. java输出矩形_java输出长方形求解答
  11. 智能运维(AIOps)时代开启,一文帮你快速了解其定义与发展现状
  12. 推荐几款好用的MySQL开源客户端,建议收藏
  13. Centos禁止屏幕虚拟键盘弹出
  14. Spring boot内嵌tomcat日志配置
  15. matlab里删除文件恢复,删除的文件如何恢复?360安全卫士找回误删文件
  16. 51单片机多线程神器:Tiny-51操作系统
  17. 身份证男女识别---非线性问题01
  18. 如何安装计算机刻录程序,详解怎么用电脑刻录光盘
  19. [python]计算miou的方式
  20. 利用Word去除图片背景色

热门文章

  1. mac安装非APPStore软件提示损坏解决办法
  2. matlab fsolve函数 误差,求助 关于matlab中fsolve函数的问题
  3. matlab fsolve函数 误差,matlab关于fsolve函数的运用出现的问题
  4. 六月福师计算机应用基础在线作业,福师《计算机应用基础》在线作业一
  5. python数字推盘_从零开始学编程做游戏:一个文科生策划的14周
  6. matlab使用LMI对二阶系统进行H无穷控制
  7. scp选择二进制_使用Git管理二进制大对象的方法
  8. python中fd和rt是什么意思_pythonfd是什么意思
  9. 【效率】再见付费的 TeamViewer,这款国产轻量级远程控制软件是绝佳的替代品!...
  10. 【matlab 激活】2017.11.11日后matlab统一过期需激活解决办法