约束简介
约束用于确保数据库数据满足特定的商业逻辑或者企业规则,如果定义了约束,并且数据不符

合约束,那么DML操作(INSERT、UPDATE、DELETE)将不能成功执行。约束包括NOT NULL、UNIQUE、PRIMARY KEY、FOREING KEY 以及CHECK、DAFAULT等6种类型

定义约束
列级约束:
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约束既可以在列级定义,也可以在表级定义。
关键字说明:
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

Oracle 约束 Constraint相关推荐

  1. 默认约束 oracle,ORACLE约束(constraint):对象的强制规定

    ORACLE约束(constraint):对象的强制规定 5种约束: NOT NULL     非空 NN UNIQUE       唯一 UK PRIMARY KEY  主键 PK FOREIGN ...

  2. ORACLE约束总结

    你对ORACLE约束的了解如何?比较模糊还是相当透彻?如果你对下面几个问题了如指掌的话,恭喜你,你已经对约束掌握得比较好了,不用看这篇文章了.ORACLE的约束有啥功能作用? 有哪些类型约束(不同版本 ...

  3. oracle怎么关闭约束,Oracle约束enable/disablenovalidate

    oracle 对constraint的开启和关闭共有四种:enable validate;enable novalidate;disable validate;disable novalidate.启 ...

  4. ORACLE中CONSTRAINT的四对属性

    ORACLE中CONSTRAINT的四对属性 summary:在data migrate时,某些表的约束总是困扰着我们,让我们的migratet举步维艰,怎样利用约束本身的属性来处理这些问题呢?本文具 ...

  5. SQL基础--gt; 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  6. 10.1 、Oracle 约束的DEFERRABLE, NOT DEFERRABLE, INITIALLY IMMEDIATE 和 INITIALLY DEFERRED

    约束的 DEFERRABLE, NOT DEFERRABLE, INITIALLY IMMEDIATE 和 INITIALLY DEFERRED [ CONSTRAINT constraint_nam ...

  7. oracle中constraint的使用,constraint用法总结 I .

    Oracle中的约束简单介绍 约束 Including Constraints 在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法 ...

  8. oracle约束什么意思,Oracle约束的属性

    今天处理了一个由于约束插入数据失败的问题,处理时感到有些吃力,三天不练手生 今天处理了一个由于约束插入数据失败的问题,,处理时感到有些吃力,三天不练手生啊.在这里回忆一下. Oracle数据库Cons ...

  9. oracle约束 关闭,Oracle约束管理脚本

    正在看的ORACLE教程是:Oracle约束管理脚本. 作为一个Oracle数据库管理员,会碰到这样的数据库管理需求,停止或者打开当前用户(模式)下所有表的约束条件和触发器.这在数据库的合并以及对数据 ...

最新文章

  1. JAVA实现链表的反转(《剑指offer》)
  2. [转]Docker基础-使用Dockerfile创建镜像
  3. python programming training(二): 排序算法
  4. OpenCV使用Sobel或Scharr OpenCV函数进行边缘检测的实例(附完整代码)
  5. cognos java api_Cognos API Connection
  6. Python把函数作为参数传入的高阶编程方法
  7. 二:前端css,即选择器
  8. 第12章[12.4] 鼠标移入移除时弹出和关闭窗口
  9. matlab简单分析频域滤波和时域滤波
  10. Bootstrap 后台模板-AdminLTE
  11. JS生成uuid的四种方法
  12. 如何快速调整参考文献格式
  13. 逆向工具Cutter
  14. unity warning CS0108: test4.name' hides inherited memberUnityEngine.Object.name’.
  15. linux中数据库的4种状态,数据库的数据持久有几种方案_数据库_数据管理_数据结构_课课家...
  16. Gstore官网学习六:安装和部署workbench(自带填坑)
  17. 【Excle数据透视表】如何快速选定数据透视表的汇总行并添加绿色底纹
  18. 批量文件压缩下载(zip)
  19. 使用stm32c8t6和mpu6050制作一台穿越机
  20. 新闻发布系统-用户登录.模糊分页查询

热门文章

  1. Python过渡性模块重载(递归重载模块)
  2. 【CSS】选择器优先级
  3. 云数据中心的网络架构
  4. 深入理解JavaScript系列(4):立即调用的函数表达式
  5. 如何查看默认root密码?
  6. VMware虚拟机中CentOS根分区的扩展
  7. Js中去除数组中重复元素的几种方法
  8. linux关机正确方法
  9. 20个命令行工具监控 Linux 系统性能(转载)
  10. 关键字 base 的作用