Oracle约数,Oracle约束简介

整理自《OCP认证指南》

001 概述

表约束是数据库能够实施业务规则以及保证数据遵循实体——关系模型的一种手段,其中,实体——关系模型由定义应用程序数据结构的系统分析所确定。

在针对定义了约束的表执行任何DML时,如果DML违反了约束,则将自动回滚整个语句。注意,如果一个DML语句影响到多个行,那么,在特定行遇到约束问题前,此语句可能已经局部成功。如果此语句是多语句事务的一部分,那么,事务中已经成功语句将保持完好,但不提交。

考点:如果违反约束,将自动回滚出现问题的整个语句,而不是语句中的单个操作,也不是整个事务。

002 约束类型

Oracle数据库支持的约束类型如下:

·unique

·not Null

·primary key

·foreign key

·check

约束具有名称。最好使用标准命名约定指定名称,如果未显式指定名称,Oracle将为其生成名称。

003 unique约束

unique约束要求,对于列或列组合而言,表中每行的值必须是不同的。如果此约束针对单个列,则相应的列称为键(key)列。如果约束由多列组成(称为组合键唯一约束),这些列并不必是相同的数据类    型,也不必在表定义中互相邻近。

unique约束的怪异之处在于,可以在键列中输入Null值。在键列中,可能有任意数量的包含Null值的行。因此,如果不搜索Null,则可以确保在键列上选择时将仅返回一行;如果搜索Null,那么,键列为Null的所有行都将返回。

考点:对于具有unique约束的列,可以插入多个包含Null的行,而对于包含primary key约束的列而言,则不存在这种可能性。

unique约束通过索引来实施。在定义unique约束时,Oracle将查看键列上的索引,如果不存在,就创建一个。此后,每次插入行时,Oracle都将查看索引,了解键列的值是否已经存在。如果已存在,则将拒绝插入。这些索引(称为B*树索引)的结构不包含Null值,正因为如此,才允许出现多个包含Null的行:索引中根本不存在Null。虽然索引的第一要务是实施约束,但也有次生效应:如果在SQL语句的where子句中使用键列,性能将会提高。但是,选择where key_column IS Null则不使用索引(因为它不包括Null),因此总是导致扫描整个表。

004 NOT Null约束

not Null约束强制在键列中输入值。它针对每个列进行定义,有时被称为强制列(mandatory column)。如果业务要求一组列都具有值,则不能为整个组定义not Null约束 ,而必须针对每列定义not Null约束。

如果尝试插入没有为具有not Null约束的列指定值的行,将导致错误。不懂?????

005 primary key约束

主键(primary key)定位表中单个行的方式。关系数据库范例要求每个表都必须有主键,主键是用于区分每行的列或列组合。Oracle数据库的定义与此范例有所不同,它允许存在不包含主键的表。

主键约束的实现实际上是unique和not Null约束的组合。键列必须具有唯一值,而且不得为空。与unique约束一样,约束列上必须存在索引。如果不存在,将在定义约束时创建索引。一个表只能有一个主键,试着创建第二个,将出现错误。但是,表可以有任意数量的unique和not Null约束列。

考点:unique和primary key约束需要索引。如果不存在,就会自动予以创建。

006 foreign key约束

在父子关系的子表中定义foreign key约束。此约束使子表中的列(或列组合)对应父表的主键列。这些列不必同名,但数据类型必须相同。foreign key约束定义数据库的关系结构:连接第三范式的表的多对一关系。

如果父表具有unique和/或primary key约束,则这些列可用作foreign key约束的基础,即使允许使用Null值,也是如此。

考点:外键约束在子表上定义,但此时的父表上必须存在unique或primary key约束。

unique约束允许约束列中出现Null值,foreign key约束也同样如此。即使父表的行中不存在Null,也可以将行插入到包含Null外键列的子表中。这会创建孤行,并产生令人不快的混乱。一般而言,unique约束中的所有列以及foreign key约束中的所有列最好也定义not Null约束,这往往是业务要求。

尝试在子表中插入父表中没有匹配行的行,将生成错误。同样,如果父表中的某行在子表中已有引用它的行,则删除相应的行将引发错误。可以使用两种技术来更改此行为。首先,可将此约束创建为on delete cascade。这意味着,如果删除父表中的行,那么Oracle将在子表中搜索所有匹配行,并删除它们。这将自动发生。一个较温和的技术是将约束创建为on delete set null。在此情况下,如果删除父表中的行,Oracle将在子表中搜索所有的匹配行,并将外键列设为空。这意味着,子行将称为孤行,但依然存在。如果子表中的列也有not Null约束,则父表上的删除操作将失败。

即使子表中没有行,也不能删除或截断外键关系中的父表。如果使用on delete set Null或on delete cascade子句,这依然适用。

foreign key约束的一个变体是自引用foreign key约束。这将定义一个条件,其中的父行和子行存在于同一个表中。

007 check约束

check约束可用来实施简单规则,如列中输入的值必须在一个值域内。规则必须是一个结构为true或false的表达式。规则可以引用作为字面值输入的绝对值,也可以引用同一行中的其它列,也可以使用一些函数。可以根据需要为一个列应用足够多的check约束,但无法使用子查询来计算值是否被允许,也无法使用诸如sysdate等函数。

提示:not Null约束实际上作为预配置check约束实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用cmd运行java可以javac不行(win10)

今天发现个有趣的问题,用cmd运行java可以javac不行。(win10) java-home和classpath配置没有问题,最后发现问提出先在path,在这里看并没有异常。 在上面图片中点击编辑文本,在这里可以清楚的看见多了引号和分号,将其删除&#xff0…

vs窗体 oracle,VS2010连接oracle数据库的简单例子

下面附有代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.OracleClient;namespace 连接oracle数据库…

EasyUI实现两个列表联动

开发中会遇到如下界面的功能样式&#xff1a; 点击左边列表记录时&#xff0c;右边的列表显示所属分类的数据 实现方法&#xff1a; 1、首先绑定左侧列表的OnClickRow事件&#xff0c;方法为&#xff1a;getDetail. 如下代码所示。 <table id"dg" class"easy…

CodeForces 176A Trading Business 贪心

Trading Business题目连接&#xff1a; http://codeforces.com/problemset/problem/176/A Description To get money for a new aeonic blaster, ranger Qwerty decided to engage in trade for a while. He wants to buy some number of items (or probably not to buy anythi…

Docker快速入门实践-纯干货文章

Docker快速入门实践-老男孩高级架构师课程内容&#xff0c;如果细看还能发现讲解视频呦&#xff01;小伙伴们赶紧猛戳吧&#xff01;老男孩高级架构师内部学员实践文档分享&#xff01;Docker快速入门实践-纯干货文章老男孩教育2016启用最新的官方博文地址&#xff1a;http://b…

180102

https://pan.baidu.com/s/1nvqYFt3转载于:https://www.cnblogs.com/wjy123/p/8175593.html

oracle的iw算法,[转载]Oracle日期周详解IW

1 ORACLE中周相关知识描述1.1 日期格式化函数TO_CHAR(X [,FORMAT])&#xff1a;将X按FORMAT格式转换成字符串。X是一个日期&#xff0c;FORMAT是一个规定了X采用何种格式转换的格式字符串&#xff0c;FORMAT与周相关的有W&#xff0c;WW&#xff0c;IW&#xff0c;D&…

spring3 常见异常解决

初学spring&#xff0c;在网上搜到一篇spring3常见异常的文章&#xff0c;现转载如下&#xff1a; 以下异常使用的是spring是3.1.1&#xff0c;是我自己学习中遇到的错误笔记&#xff0c;有可能不是都适用&#xff0c;仅做参考 异常1&#xff1a;java.lang.NoClassDefFoundErro…

git忽略某个文件夹

data/cache/* !data/cache/index.html !data/cache/smiOAuthToken.php 转载于:https://www.cnblogs.com/xiaobiaomei/p/8177168.html

Iterm2的一些好用法

今天把mac带到公司办公了&#xff0c;爽歪歪啊。 1&#xff0c;如何脱离鼠标拷贝屏幕中的内容 1) Commandf 调出选择框&#xff0c;并在其中输入要复制的字符&#xff0c;可以使用Tab补全 2) 按 Command c复制字符 3) 字符已经复制到剪切板了

记录一些容易忘记的属性 -- UITabBarController

UIViewController中的 property(nonatomic,copy) NSString *title; // Localized title for use by a parent controller.&#xff0c;仔细理解英文注释的意思 下面是Title的实际作用 //创建给分栏控制器使用的视图控制器(包括导航控制器) FirstViewController *firstVC …

LINQ to Tree - A Generic Technique for Querying Tree-like Structures,包含遍历WPF VisualTree

https://www.codeproject.com/Articles/62397/LINQ-to-Tree-A-Generic-Technique-for-Querying-Tree#generic 转载于:https://www.cnblogs.com/sjqq/p/8177276.html

在 ASP.NET MVC 3 中应用 KindEditor

http://www.cnblogs.com/weicong/archive/2012/03/31/2427608.html 第一步 将 KindEditor 的源文件添加到项目中&#xff0c;建议放到 /Scripts/kindeditor 目录中&#xff0c;其中只需要有 lang目录、plugis目录、themes目录和kindeditor-min.js文件即可。 第二步 在 /Views/S…

php phalcon.dll 下载,extension=php_phalcon.dll 安装过程

到phalcon官方网站下载对应的dll文件 phalcon_x86_VC9_php5.4.0_1.2.5 我下的是这个版本 所以用的wamp版本的php也是 php 5.4版本&#xff1b;所以没啥问题&#xff01;3&#xff1a;下载完了dll文件放在 刚安装好的wamp服务器下&#xff1a;因为我安装的是D盘&#xff1a;D:\w…

centOS配置国内镜像

本文以163为例&#xff0c; cd /etc/yum.repos.d/wget http://mirrors.163.com/.help/CentOS6-Base-163.repo 转载于:https://www.cnblogs.com/azhqiang/p/8177408.html

浅谈https(创建、传输、断开)

前言 比起http&#xff0c;https是更安全的&#xff0c;传输过程中加密的。但是具体的加密过程是怎么样我一直一知半解。花了点时间抓包简单分析了一下&#xff0c;希望对大家有用。 在windows平台下抓tcp包是用wireshark的了。没啥好说的。   我们平常的一次https 的请求&am…

暑期项目经验(九) -- request session application

request、session、application 一、基础知识 可以看看 浅谈&#xff1a;request&#xff0c;session&#xff0c;application (http://blog.csdn.net/hzc543806053/article/details/7416007) 要点&#xff1a; 作用域&#xff1a; request<session<application 共同方法…

oracle 还原dmp时_报错的值太大,基于oracle数据库的CLOUD备份恢复测试

CLOUD oracle数据库备份恢复测试强烈建议使用expdp/impdp&#xff0c;因为&#xff1a;在expdp的时候Oracle不会再依赖和参考NLS_LANG的设置&#xff0c;而是完全按照数据库本身的字符集导出数据&#xff0c;impdp的时候&#xff0c;Oracle会自动判断如果dmp文件中的字符集和目…

Servlet读取文件的最好的方式

在java web 开发的时候不可避免的会读取文本信息&#xff0c;但是方式不同&#xff0c;所付出的代价也是不一样的&#xff0c;今天学到了一个比较好的实用性的技巧&#xff0c;拿来与大家分享一下。 读取属性配置文件 之所以说成是读取属性&#xff08;properties)文件&#xf…

Form.php 日期表单,Bootstrap日期和时间表单组件使用方法

提取其中的主要文件js/bootstrap-datetimepicker.js和css/bootstrap-datetimepicker.min.css1.引入bootstrap.min.css&#xff0c;因為其樣式包含在此文件中2.引入jquery.js&#xff0c;因為bootstrap是依賴於jquery的3.引入bootstrap.min.js以上是必備內容4.引入日期組件的css…