oracle Constraint[相似 constraint使用方法总结 I]
约束简单介绍
约束用于确保数据库数据满足特定的商业逻辑或者企业规则,假设定义了约束,而且数据不符
合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功运行。约束包含NOT NULL、UNIQUE、PRIMARY KEY、FOREING KEY 以及CHECK等五种类型
定义约束
列级约束:
column [CONSTRAINT constraint_name] constraint_type
表级约束:
column ,...,
[CONSTRAINT constraint_name] constraint_type (column,...)
1.定义NOT NULL约束
NOT NULL 约束仅仅能在列级定义,不能在表级定义
例:
CREATE TABLE emp01(
eno INT NOT NULL,
name VARCHAR2(10) CONSTRAINT nn_name2 NOT NULL,
salary NUMBER(6,2)
);
上例中,eno列与name列上定义了NOT NULL约束,当中eno列的NOT NULL约束没有指定约束名,而
name列则指定了约束名nn_name。
能够通过查询user_constraints字典来查看所定义的约束,如:
SQL> select constraint_name,constraint_type from user_constraints
2 where table_name='EMP01';
CONSTRAINT_NAME CO
------------------------------------------------------------ --
SYS_C0010618 C
NN_NAME C
可见,没有给约束名的,系统将会自己主动的定义一个约束名称,当中约束类型中,P:表示主键,R:
表示外键,C表示NOT NULL或CHECK,U表示UNIQUE。且系统中同一方案下的的约束名不能反复
2.定义UNIQUE约束
定义了惟一约束之后,惟一约束列的列值不能反复,但能够为NULL。UNIQUE约束既能够在列级
定义,也能够在表级定义
例:
CREATE TABLE emp02(
eno INT UNIQUE,name VARCHAR2(10) CONSTRAINT u_name UNIQUE,
salary NUMBER(6,2)
);
相同,假设没有给出约束名,系统会自己主动定义一个名称,可从查询结果得出
SQL> select constraint_name,constraint_type from user_constraints
2 where table_name='EMP02';
CONSTRAINT_NAME CO
------------------------------------------------------------ --
SYS_C0010623 U
U_NAME
U
3.定义PRIMARY KEY 约束
当定义主键约束后,主键约束列的列值不仅不能反复,并且也不能为NULL。主键约束既能够在
列级定义,也能够在表级定义。一张表最多仅仅能具有一个主键约束,当一个表中的多个列都要为
主键是,能够在表级定义。
例1:列级定义主键
CREATE TABLE depto04(
dno INT PRIMARY KEY,
dname VARCHAR2(10),loc VARCHAR2(20)
);
通过查询user_constraints可得出
SQL> select constraint_name ,constraint_type from user_constraints
2 where table_name='DEPT04';
CONSTRAINT_NAME CO
------------------------------------------------------------ --
SYS_C0010625 P
通过查询user_cons_columns可得出
SQL> select constraint_name,column_name from user_cons_columns
2 where table_name='DEPT04';
CONSTRAINT_NAME COLUMN_NAME
------------------------------------------------------------ ------------
SYS_C0010625 DNO
例2:表级定义主键
CREATE TABLE dept05(
dno INT,
dname VARCHAR2(10),loc VARCHAR2(20),
PRIMARY KEY(dno,dname)
);
通过查询user_constraints能够得出
SQL> select constraint_name,constraint_type from user_constraints
2 where table_name='DEPT05';
CONSTRAINT_NAME CO
------------------------------------------------------------ --
SYS_C0010626 P
通过查询user_cons_columns可得出
SQL> select constraint_name,column_name from user_cons_columns
2 where table_name='DEPT05';
CONSTRAINT_NAME COLUMN_NAME
------------------------------------------------------------ -------------
SYS_C0010626 DNO
SYS_C0010626 DNAME
可见,当在表级定义时,约束名称将会同样,而在user_cons_columns查询是,每一列将相应约束
名称同样的两条记录
4.定义FOREING KEY约束
当定义了外部键约束之后,要求外部键列的数据必须在主表的主键列(或惟一列)中存在,或
者为NULL,FOREING KEY约束既能够在列级定义,也能够在表级定义。
keyword说明:
FOREING KEY:该选项用于指定在表级定义外部键约束。当在表级定义外部键约束时必须指定该选
项,在列级定义外部键约束不须要指定该选项
REFERENCES:该选项用于指定主表名及其主键列。当定义外部键约束时,该选项必须指定。
ON DELETE CASCAED:该选项用于指定级联删除选项。假设在定义外部键约束时指定了该选项,那
么当删除主表数据时会级联删除从表的相关数据。
ON DELECT SET NULL:该选项用于指定转换相关的外部键值为NULL,假设在定义外部键约束时指定
了该选项,那么当删除主表数据时会将从表外部键列的数据设置为NULL。
例1:列级定义外键约束
CREATE TABLE emp04(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT CONSTRAINT fk_dno REFERENCES dept04(dno)
);
SQL> select constraint_name,constraint_type from user_constraints
2 where table_name='EMP04';
CONSTRAINT_NAME CO
------------------------------------------------------------ --
FK_DNO R
SQL> select constraint_name,column_name from user_cons_columns
2 where table_name='EMP04';
CONSTRAINT_NAME COLUMN_NAME
------------------------------------------------------------ -----------
FK_DNO DNO
例2:表级定义外键约束
CREATE TABLE emp05(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT,
CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
);
SQL> select constraint_name,constraint_type from user_constraints
2 where table_name='EMP05'
3 ;
CONSTRAINT_NAME CO
------------------------------------------------------------ --
FK_DNO_NAME R
SQL> select constraint_name,column_name from user_cons_columns
2 where table_name='EMP05';
CONSTRAINT_NAME COLUMN_NAME
------------------------------------------------------------ -----------
FK_DNO_NAME DNO
FK_DNO_NAME NAME
5.定义CHECK约束
CHECK约束既能够在列级定义,也能够在表级定义。CHECK约束同意列为NULL。
例:
CREATE TABLE emp06(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
CHECK (salary BETWEEN 1000 AND 5000)
);
SQL> select constraint_name,constraint_type from user_constraints
2 where table_name='EMP06';
CONSTRAINT_NAME CO
------------------------------------------------------------ --
SYS_C0010629 C
SQL> select constraint_name,column_name from user_cons_columns
2 where table_name='EMP06';
CONSTRAINT_NAME COLUMN_NAME
------------------------------------------------------------ -----------
SYS_C0010629 SALARY
6.定义复合约束
复合约束即在表级定义,基于多列的复合约束,如:
CREATE TABLE dept05(
dno INT,
dname VARCHAR2(10),loc VARCHAR2(20),
PRIMARY KEY(dno,dname)
);或
CREATE TABLE emp05(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT,
CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
);
9.3维护约束
9.3.1添加约束
假设添加UNIQUE、PRIMARY KEY、FOREIGN KEY 和CKECK 必须使用ALTER TABLE语句的ADD子句;
假设添加NOT NULL约束,那么必须使用ALTER TABLE语句的MODIFY子句,如:
ALTER TABLE table_name ADD [CONSTRAINT constraint_name]
constraint_type (column,...)
ALTER TABLE table_name MODIFY column
[CONSTRAINT constraint_name] NOT NULL;
9.3.2改动约束名
在同一个方案中,约束名必须惟一,而且约束名也不能与其它对象同名。当鱫IMPDP工具或者IMP
工具导入其它对象时,如发现有同名的对象,将会出错
语法:
ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name
TO new_constraint_name;
例:
ALTER TABLE emp01 RENAME CONSTRAINT SYS_C005028
TO ck_emp01_salary;
9.3.3 删除约束
当删除特定表的主键约束时,假设该表具有相关的从表,那么在删除主键约束
时必须带有CASCAED选项
语法:
ALTER TABLE table_name DROP
CONSTRAINT constraint_name |PRIMARY KEY
例1
ALTER TABLE emp01 DROP CONSTRAINT ck_emp01_salary;
例2
ALTER TABLE dept01 DROP PRIMARY KEY CASCAED
9.3.4禁止约束
禁止约束指使约束暂时失效。当禁止了约束之后,约束规则将不再生效。在使用SQL*LOADER或
INSERT装载数据之前,为了加快数据装载速度,应该首先禁止约束,然后装载数据。
语法:
ALTER TABLE table_name
DISABLE CONSTRAINT constaint_name [CASCAED];--CASCAED用于指定级联禁止从表的外部键
约束
例:
ALTER TABLE emp05 DISABLE CONSTAINT SYS_C00502;
9.3.5 激活约束
语法:
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
例:
ALTER TABLE emp05 ENABLE CONSTRAINT SYS_C005022;
9.4 显示约束信息
1.USER_CONSTRAINTS
2.USER_CONS_COLUMNS
Zz_cnblogs :http://www.cnblogs.com/ljcbest/archive/2010/09/02/1816346.html
oracle Constraint[相似 constraint使用方法总结 I]的更多相关文章
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
引用自 :http://www.2cto.com/database/201307/224836.html Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表 ...
- oracle调用JAVA类的方法
导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了, 1.操作系统需要拥有支持loadjava命令的jdk. 2.加 ...
- 【转】有关Oracle随机字符串的生成方法及具体应用
Oracle生成随机字符串的方法是通过dbms_random.string实现的. 1.dbms_random.string用法Oracle官方文档参考链接:http://download.oracl ...
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...
- Oracle OCI-22053:溢出错误解决方法
原文 Oracle OCI-22053:溢出错误解决方法 Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle 数值转换为公共语言运行库数据类型时,小数点后边的位数可能过多,这 ...
- Oracle除去换行符的方法
Oracle除去换行符的方法 很多数据存进数据库后,可能需要将整条数据取出,并用特殊 符号分割,而且整条数据必须是处于一行,如此,如果数据出现 换行的情况,那么读取时就有问题. 这个时候就 ...
- oracle误删除数据的恢复方法
学习数据库时,我们只是以学习的态度,考虑如何使用数据库命令语句,并未想过工作中,如果误操作一下,都可能导致无可挽回的损失.当我在工作中真正遇到这些问题时,我开始寻找答案. 今天主要以oracle数据库 ...
- 经历:asp.net oracle 部署问题以及解决方法
原文:[原创]经历:asp.net oracle 部署问题以及解决方法 精简的美丽...... 一.环境 开发环境 win7 64bit Vs2010 ...
- Oracle删除死锁进程的方法
本文实例讲述了Oracle删除死锁进程的方法.分享给大家供大家参考.具体如下: 步骤1:用以下SQL查看进程列表,判断出被锁定的表 复制代码代码如下: SELECT dob.OBJECT_NAME T ...
- 恢复oracle数据库误删除数据的方法汇总
学习数据库时,我们只是以学习的态度,考虑如何使用数据库命令语句,并未想过工作中,如果误操作一下,都可能导致无可挽回的损失.当我在工作中真正遇到这些问题时,我开始寻找答案.今天主要以oracle数据库为 ...
随机推荐
- FusionCharts參数中文说明
FushionCharts是把抽象数据图示化的套件,使用方便,配置简单.其相关參数中文说明例如以下. 功能特性 animation 是否动画显示数据,默觉得 1( ...
- CSS背景图拉伸自适应尺寸
.bg{ background:url(images/test.jpg); filter:"progid:DXImageTransform.Microsoft.AlphaImageLoade ...
- 一般报java.lang.NullPointerException的原因有以下几种
一般报java.lang.NullPointerException的原因有以下几种: ·字符串变量未初始化: ·接口类型的对象没有用具体的类初始化,比如: List lt; 会报错 List lt = ...
- 学习NodeJS第一天:node.js介绍
Node.JS 前辈 C 程序猿 Ryan Dahl(http://four.livejournal.com/)工程,根据 Google 著名的开源 JavaScript 发动机 V8 对于二次开发 ...
- OCA读书笔记(18) - 使用Support工具
调查和解决问题 问题:数据库中的任一严重的错误定义为一个问题,一般来说,这些错误包括大家熟悉的ORA-600错误和ORA-04031(共享池超出)错误,涉及数据库问题的所有元数据都存储在ADR中,每个 ...
- C++经典面试题(二)
近期看一些面试题,认为假设自己被问到了,并不能非常利落的回答出来. 一是从来没有这个意识,二是没有认真的梳理下. 以下对这些题做出分析,哈!个人能力有限,当中难免有疏漏,欢迎大家补充咯. 11.引用与 ...
- WPF之Binding深入探讨--Darren
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- HDOJ 2665 Kth number
静态区间第K小....划分树裸题 Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- MIPS台OpenWrt在系统内的路由器Rust应用程序开发
笔者:Liigo(庄小莉) 迄今:2014年9一个月17日本 (9一个月29日更新,11一个月19日本再次更新.在最后可用更新) 原文链接:http://blog.csdn.net/liigo/art ...
- Hadoop学问Eclipse构建Hadoop工程
在此之前的基础Hadoop在官方文件HDFS.MapReduce架构.配置管理是学习,但是,一些地方的官方文件相当含糊的解释. 我们没有发挥人可以体验,某种官方文件似业务规则或要求,但是,真正的细节还 ...