位置:首页 » 技术 » Oracle数据库的完整性约束规则详解

Oracle数据库的完整性约束规则详解

日期:2013-05-02 阅读:0num
Advertisement

Oracle数据库的完整性约束规则详解

约束简介:

约束用于确保数据库数据满足特定的商业逻辑或者企业规则,如果定义了约束,并且数据不符合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功执行。

完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束:

    Check

    NOT NULL

    Unique

    Primary

    Foreign key

完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。

* 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约束,但如果某个约束作用于多个字段,必须在表级定义约束

* 在定义约束时可以通过CONSTRAINT关键字为约束命名,如果没有指定,ORACLE将自动为约束建立默认的名称

定义约束

列级约束:

column [CONSTRAINT constraint_name] constraint_type

表级约束:

column ,...,

[CONSTRAINT constraint_name] constraint_type (column,...)

check约束

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

* 可以在表级或字段级定义

* 对同一个字段可以定义多个CHECK约束,同时也可以定义NOT NULL约束

CREATE TABLE emp06(

eno INT,

name VARCHAR2(10),

salary NUMBER(6,2),

CHECK (salary BETWEEN 1000 AND 5000)

);

not null约束

只能在字段级定义NOT NULL约束,在同一个表中可以定义多个NOT NULL约束

NOT NULL约束应用在单一的数据列上,并且他保护的数据列必须要有数据值。缺省状况下,ORACLE允许任何列都可以有NULL值。某些商业规则要求某数据列必须要有值,NOT NULL约束将确保该列的所有数据行都有值。

CREATE TABLE emp01(

eno INT NOT NULL,

name VARCHAR2(10) CONSTRAINT nn_name2 NOT NULL, salary NUMBER(6,2)

);

unique约束

定义了UNIQUE约束的字段中不能包含重复值,可以为一个或多个字段定义UNIQUE约束,因此,UNIQUE即可以在字段级也可以在表级定义,在UNIQUED约束的字段上可以包含空值.

CREATE TABLE emp02(

eno INT UNIQUE,

name VARCHAR2(10) CONSTRAINT u_name UNIQUE,

salary NUMBER(6,2)

);

primary key约束

ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引,一张表最多只能具有一个主键约束

CREATE TABLE depto04(

dno INT PRIMARY KEY,

dname VARCHAR2(10),

loc VARCHAR2(20)

);

foreign key约束

* 定义为FOREIGN KEY约束的字段中只能包含相应的其它表中的引用码字段的值或者NULL值

* 可以为一个或者多个字段的组合定义FOREIGN KEY约束

* 定义了FOREIGN KEY约束的外部码字段和相应的引用码字段可以存在于同一个表中,这种情况称为"自引用"

* 对同一个字段可以同时定义FOREIGN KEY约束和NOT NULL约束

定义了FOREIGN KEY约束的字段称为"外部码字段",被FORGIEN KEY约束引用的字段称为"引用码字段",引用码必须是主码或唯一码,包含外部码的表称为子表,包含引用码的表称为父表.

CREATE TABLE emp04(

eno INT,

name VARCHAR2(10),

salary NUMBER(6,2),

dno INT CONSTRAINT fk_dno REFERENCES dept04(dno)

);

相关文章
  • Oracle数据库的完整性约束规则详解

    Oracle数据库的完整性约束规则详解 约束简介: 约束用于确保数据库数据满足特定的商业逻辑或者企业规则,如果定义了约束,并且数据不符合约束,那么DML操作(INSERT.UPDATE.DELETE)将不能成功执行. 完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束: Check NOT NULL Unique Primary Foreign key 完整性约束是一种规则,不占用任何数据库空间.完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用.用户可以指明约束是启用的

  • Oracle数据库过程之后台进程详解 Oracle数据库过程之后台进程详解

    Oracle数据库进程之后台进程详解 本文我们主要介绍一下Oracle数据库的后台进程的相关知识,我们知道,Oracle实例包括两部分:SGA 和一组后台进程.后台进程执行保证数据库运行所需的实际维护任务. 例如,有一个进程为我们维护块缓冲区缓存,根据需要将块写出到数据文件.另一个进程负责当在线重做日志文件写满时将它复制到一个归档目标.另外还有一个进程负责在异常中止进程后完成清理,等等.每个进程都专注于自己的任务,但是会与所有其他进程协同工作.例如,负责写日志文件的进程填满一个日志后转向下一个日

  • Oracle数据库中文件加密详解

    Oracle关系数据库系统以其卓越的性能获得了广泛的应用,而保证数据库的安全性是数据库管理工作的重要内容.本文是笔者在总结Oracle数据库安全管理工作的基础上,对Oracle数据库系统密码文件的创建.使用和维护作了详细的介绍,供大家参考. 在Oracle数据库系统中,用户如果要以特权用户身份登录Oracle数据库可以有两种身份验证的方法:即使用与操作系统集成的身份验证或使用 Oracle数据库的密码文件进行身份验证.因此,管理好密码文件,对于控制授权用户从远端或本机登录Oracle数据库系统,

  • oracle数据库的恢复教程详解 oracle数据库的恢复教程详解

    oracle数据库恢复方法与mysql和sqlserver的恢复是有一些区别了,它有着强大的功能了,下面我们来看看oracle数据库的恢复教程吧. racle其实也差不多,只不过oracle本身设计的安全性和稳定性都十分好.所以相应的配置文件也要多些. 1.先将原oracle的安装目录和data目录都做个备份.然后安装oracle,安装路径要和原来的一样.安装时选择'只安装软件'即可,不用选择安装数据库.例如:安装在E:oracleproduct10.2.0目录,会发现在该目录只有一个db_1目

  • oracle 数据库多表插入详解

    插入多表操作. 大部分插入操作是针对单表操作的.但是oracle支持多表插入(insert)语句 .在数据仓库方面的抽取.转移和装入(ETL,Extract Transform and Load)的例程方面方面你将频繁的用到多表插入操作. 通过一个多表插入,你能你可以通过一个单一的数据源,把数据装载到多个数据表里面.通过减少整个数据的路径,来减少减少工作量,因此去的更快的输出. 如果一个WHEN条件为真(TRUE),相关的INTO语句被执行.如果没有条件为真,为真,那么ELSE条款被执行.关键字

  • oracle数据库trunc函数用法详解

    trunc在mysql中清除表了,但在oralce数据库中trunc好像不是这样功能了而是对日期操作的一个常用函数了,下面我们来看trunc函数的用法. trunc函数作用是截取日期,能准确到整点.截取后得到的仍为date数据类型. 一.基本用法 1.默认截取到日,例如: select trunc(sysdate) from dual; 结果:2015-06-24 00:00:00 2.截取年: select trunc(sysdate,'YYYY') from dual; 结果:2015-01

  • Windows 下Oracle数据库装配以及Oracle SQL Developer(图文详解) Windows 下Oracle数据库装配以及Oracle SQL Developer(图文详解)

    Windows 下Oracle数据库安装以及Oracle SQL Developer(图文详解) 转载请注明:http://blog.csdn.net/uniquewonderq 问题:在windows下安装Oracle 数据库 步骤:通过网址"http://www.oracle.com"打开Oracle官网首页,点击Downloads进入Oracle 数据库的下载页面.如图所示: 点击进入:选择database 选择Oracle Database Express Edition 11

  • 同系统oracle rman异机数据库移植,oracle rman备份和恢复详解

    同系统oracle rman异机数据库移植,oracle rman备份和恢复详解 环境: 源服务器: VM7.14 rhel5.5-32 oracle 11.2.0.0g 172.16.3.202 目标服务器 VM7.14 rhel5.5-32 oracle 11.2.0.0g 172.16.3.204 源服务器 一.在数据库中加入验证表和数据: [[email protected] ~]$ sqlplus "/as sysdba" SQL*Plus: Release 11.2.0.1.0 Pr

  • oracle clusterware 10g/11g 过程详解

    oracle clusterware 10g/11g 进程详解  oracle clusterware 10g/11g 进程详解 The Oracle 10g Clusterware processes on UNIX-based systems are: Oracle Clusterware Oracle-provided clusterware that manages clusterdatabase processing including node membership, group

  • Oracle DBA学习笔记-STARTUP详解

    Oracle DBA学习笔记-STARTUP详解 说明:参考数据库版本:10.0.2 一.命令解析 STARTUP options | upgrade_options options为:[FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname] | [ OPEN [open_options] [dbname] ] | NOMOUNT ], NOMOUNT.MOUNT.OPEN为startup的三个阶段,不能在命令中同时存在.其中,op

  • Oracle数据库服务的相干知识详解-摘

    Oracle数据库服务的相关知识详解-摘 Oracle数据库的操作中,我们常常需要启动或关闭一些服务以实现我们需要的功能.但是前提是我们必须要了解Oracle数据库的服务,如果您对Oracle数据库的服务也不是很了解,没关系,本文我们就对Oracle数据库的服务进行了详细的介绍,接下来就让我们一起来了解一下这部分内容吧. Oracle的默认服务一共有5个: 1.OracleDBConsoleorcl oem控制台的服务进程. 2.OracleJobSchedulerORCL 定时器的服务进程.

  • oracle内存储器调优参数详解

    oracle内存调优参数详解 转自:http://www.douban.com/group/topic/16419241/ 实例结构 oracle实例=内存结构+进程结构 oracle实例启动的过程,其实就是oracle内存参数设置的值加载到内存中,并启动相应的后台进程进行相关的服务过程. 进程结构 oracle进程=服务器进程+用户进程 几个重要的后台进程: DBWR:数据写入进程. LGWR:日志写入进程. ARCH:归档进程. CKPT:检查点进程(日志切换:上一个检查点之后,又超过了指定

  • 9大Oracle性能优化基本方法详解(转)

    九大Oracle性能优化基本方法详解(转) Oracle性能优化基本方法包括一下几个步骤,包括: 1)设立合理的Oracle性能优化目标. 2)测量并记录当前的Oracle性能. 3)确定当前Oracle性能瓶颈(Oracle等待什么.哪些SQL语句是该等待事件的成分). 4)把等待事件记入跟踪文件. 5)确定当前的OS瓶颈. 6)优化所需的成分(应用程序.数据库.I/O.争用.OS等). 7)跟踪并实施更改控制过程. 8)测量并记录当前性能 9)重复步骤3到7,直到满足优化目标 下面来一一详述

  • ORACLE EXP/IMP的运用详解 ORACLE EXP/IMP的运用详解

    ORACLE EXP/IMP的使用详解 ORACLE EXP/IMP的使用详解 导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理冲突等中有不小的功劳.当然,我们也可以把它作为小型数据库的物理备份后的一个逻辑辅助备份,也是不错的建议.对于越来越大的数据库,特别是TB级数据库和越来越多数据仓库的出现,EXP/IMP越来越力不从心了,

  • Oracle中job的应用详解

    Oracle中job的使用详解 我们在项目开发中,常常会有一些复杂的业务逻辑.使用oracle的存储过程,可以大大减少java程序代码的编写工作量,而且存储过程执行在数据库上,这样可以利用oracle的良好性能支持,极大地提高程序执行效率和稳定性.定时执行存储过程,就要用到job. 以下是常用的参数说明: 字段(列) 类型 描述 JOB NUMBER 任务的唯一标示号 LOG_USER VARCHAR2(30) 提交任务的用户 PRIV_USER VARCHAR2(30) 赋予任务权限的用户 S

  • oracle init.ora惯用配置详解

    oracle init.ora常用配置详解 <!--正文 begin--> 参考网上整理了重要的配置文件 db_name = "51cto" 一个数据库标识符,应与CREATE DATABASE 语句中指定的名称相对应. instance_name = 51cto 在多个例程使用相同服务名的情况下,用来唯一地标识一个数据库例程. INSTANCE_NAME 不应与 SID 混淆,它实际上是对在一台主机上共享内存的各个例程的唯一标识. service_names = 51ct

  • 数据库题目整理及详解(三) 数据库题目整理及详解(三)

    前言 -李冠<蝶恋花·春暮> 遥夜亭皋闲信步. 才过清明,渐觉伤春暮. 数点雨声风约住.朦胧淡月云来去. 桃杏依稀香暗渡. 谁在秋千,笑里轻轻语. 一寸相思千万绪.人间没个安排处. 大早, 喜见枯草堆中顽强的四叶草: 说明 接着之前的SQL语句继续整理, 内容大多参考了互联网上的很多内容, 好多都相似, 结尾缀上出处, 感谢分享. 这一部分内容, 在mysql中也亲自测试了, 带有截图. 这一部分主要内容为:mysql数据库改变表结构相关的SQL语句, 在书写上的格式.规范及环境配置等,详见:

  • Oracle数据操作跟控制语言详解

    Oracle数据操作和控制语言详解 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL.其中用于定义数据的结构,比如 创建.修改或者删除数据库:DCL用于定义数据库用户的权限:在这篇文章中我将详细讲述这两种语言在Oracle中的使用方法. DML语言 DML是SQL的一个子集,主要用于修改数据,下表列出了ORACLE支持的DML语句. 语句 用途 INSERT 向表中添加行 UPDATE 更新存储在表中的数据 DELETE 删除行 SELEC

  • 红帽子数据库.profile文件内容详解

    红帽子数据库.profile文件内容详解 #User specific enviroment and startup programs TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR umask 022 #ORACLE_HOSTNAME=dbs1; export ORACLE_HOSTNAME ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ####基目录 ORACLE_HOME=$ORACLE_BA

  • 数据库同机器移植详解

    数据库同机器移植详解 背景,要腾出原理数据库所占的磁盘空间/hypdata,信息部给添加了一块另外的磁盘,目录为/hypdata47 要把目前/hypdata移植到到/hypdata47上. 1.备份 shutdown immedaite oracle数据库,备份控制文件到trace cd /hypdata/ tar -cvf cd /hypdata47/app20130526.rar app 备份数据库用户orahyp的.profile文件,cp .profile .profile201305

最新文章
  • 关于备案的问题.

    现有一网站a.com,已有备案号,还有一域名b.com,已备案到a.com这个网站上,也就是说a.com备案信息中能看到b.com这个域名.现在想把b.com指向到一个新的网站上,该网站与a.com是在同一台服务器上.那么b.com这个网站还需要重新备案吗? --cut-- abu在2014-04-23 16:39:1回答到: 看得头晕,我来复述一下,两个域名都指向一个网站,两个域名都备案了. 现在需要其中一个域名在同一服务器上新开个网站,请问需要备案么? 名字不变服务商不变的话应该是不用,不过

  • 反代 dmm 变成直接跳转到 dmm.com 了,不知道为什么

    配置文件如下: server { listen 443; server_name fastest.tk; ssl on; ssl_certificate /etc/ssl/certs/sslkey/1_fastest.tk_bundle.crt; ssl_certificate_key /etc/ssl/certs/sslkey/2_fastest.tk.key; ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:-ADH:+HIGH:+MEDIUM:-LOW

  • [上海]Web开发工程师,对!说的就是你!

    Web开发工程师 欢迎兼职,可Homebase 工作职责: 1.负责公司网站技术(页面.程序.服务器等)开发.支持工作: 2.管理技术团队:独立或带领团队配合运营完成网站开发需求: 3.网站内容类似淘宝: 资格要求: 1.计算机相关专业,本科以上学历: 2.熟练掌握Web前端开发技术包括Javascript.Ajax/jQuery.CSS和HTML,能够使用CSS Sprites和其他网页优化技术, 熟悉W3C标准规范更佳: 3.熟悉DIV+CSS开发模式,具有一定的jQuery架构开发经验:

  • 航天员爆猛料:太空站里看小电影解决需求 航天员爆猛料:太空站里看小电影解决需求

    俄罗斯航天员波利亚哥夫(Valery Polyakov)曾于1995年于外太空逗留437天18小时,创下人类史上单次太空任务逗留最长时间纪录.他曾披露,当局会在他们执行太空任务时,送上香艳刺激的的色情影片,让他们解决生理需要.曾有人爆料,波利亚哥夫曾在留守太空站期间和其他航天员发生性行为,不过他郑重否认这项传闻. 宇航员在太空的一举一动都让人好奇,怎么吃饭?怎么喝水?都与常人不一般. 不过另一件事情,想必大家一定会更感兴趣.那就是,宇航员们在外太空,是如何解决"羞羞"的事情的呢? 近日

  • 难忘的六一儿童节作文大全

    庆祝六一儿童节作文:欢庆六一儿童节 六一的来临,点燃了我们的快乐,也放飞了我们心中的梦想--"哈哈!"一缕轻风伴着银铃般的笑声,回荡在操场上.一个个五颜六色的风筝直冲云霄,在天上飞舞.盘旋.看着风筝,我轻轻道:"bey,我的最后一个六一!" 我们排着整齐的队伍来到了礼堂,礼堂里张灯结彩,热闹非凡.一眼望去,礼堂里就像马勺里淘菜--水泄不通.随着主持人嘹亮的声音,开始了这场"庆六一"的联欢会.首先上场的是一群可爱的一年级小同学,表演的是江南styl

  • 狗的作文3篇

    评价: "小公主"真是又可爱又调皮,很像你哦!相信你们生活得很愉快! 我家的狗"小公主" 我家养了一只小狗,名叫"小公主". 小公主有一身毛茸茸的毛,头顶长着两只小耳朵,拥有四肢强壮的腿,跑起来速度可快啦!它经常和别的小狗打架,这是不礼貌的行为.它喜欢钻到草丛里玩,一回来就变成了一团"乌云".所以我经常要给它洗澡. 这就是我生活中最可爱的小伙伴! 我家的小黑狗 我家有一只可爱的小狗,它全身的毛黑得油光发亮,所以我就叫它小黑.小

  • IE web开发相干针对IE10的CSS Hack(User-agent方法)

    IE web开发相关针对IE10的CSS Hack(User-agent方法) http://www.iefans.net/ie10-css-hack-user-agent/ 引用地址 在IE6/IE7/IE8的时候,为了解决网页在IE浏览器下的兼容性,我们会经常用到针对IE浏览器的条件注释来解决问题.延续这个思维模式,当我们发现页面在IE10中表现不正常了,又不能忽略不管,所以有些人惯性思维想到的方法就是针对IE10写一个条件注释.值得高兴的是,在IE10里已无需使用条件注释. 如果我想针对I

  • Google Chrome 为什么打压 H.264

    Google Chrome 为何打压 H.264 Google 今天在 Chromium 官方博客宣布由于 H.264 编解码器并非开放标准,Chrome 将在几个月后正式停止对 H.264 视频解码的支持,全面采用开放的 WebM 和 Theora 格式. Google 在博客上表示,自从 WebM 视频编解码器推出以后,在性能.厂商支持以及独立性方面已经取得了很大的进步,为了与 Chromium 现有支持的編解码器保持一致,Chrome 最终将改变 HTML5 <video> 标签的视频支

  • 关于TFT屏的显示刷新有关问题

    关于TFT屏的显示刷新问题 我一直以来不是很明白TFT屏的显示刷新原理,是不是每一次更换内容都要对整个显示屏做一个整体刷新呢? 比如我只是弹出一个小窗口,背景不变,当我把小窗口关闭时能不能只是把原来显示窗口的位置刷新掉,而其他地方的背景不需要重新刷新 ------解决方案-------------------- TFT就类似于由3色LED组成的小单元的阵列,也就是说在一个瞬间,只有一个点是通电的,快速的刷新就是为了让人观察TFT时觉得TFT的每一个单元都是同时工作的,所以显存必须不断的快速的向T

  • Objective-C中NSValue的施用

    Objective-C中NSValue的使用 我们在C/C++开发中常会用到结构体来帮助我们简单封装基本数据类型,在Objective-C中我们也可以使用结构体来完成数据类型的封装.同时,Cocoa Touch还提供了一个NSValue来帮助我们更好地在开发中使用结构体. 我们可以使用NSValue来辅助我们实现一些简单数据结构的封装.比如我们定义了一个简单的结构体类型 typedef struct { int id, float height, unsigned char flag }MyTe

热门推荐