转 ORACLE约束总结

https://www.cnblogs.com/kerrycode/archive/2012/05/13/2454614.html

你对ORACLE约束的了解如何?比较模糊还是相当透彻?如果你对下面几个问题了如指掌的话,恭喜你,你已经对约束掌握得比较好了,不用看这篇文章了。ORACLE的约束有啥功能作用? 有哪些类型约束(不同版本ORACLE是否不同)?视图有约束吗?约束是否会影响SQL性能? 约束信息存储在哪些系统视图、数据字典中?约束能否修改名称?能否禁用约束?延迟约束有啥好处.......

约束定义

约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字,ORACE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称。).

约束功能

约束的功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。

约束分类

约束分为6类: 非空(NOT NULL)约束、 唯一(UNIQUE)约束、主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束、条件(CHECK)约束、REF约束。

非空(NOT NULL)约束:顾名思义,所约束的列不能为NULL值。否则就会报错

唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。

主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。

外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。

条件(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。

REF约束的定义:REF column by definition references an object in another object type or in a relational table. A REF constraint lets you further describe the relationship between the REF column and the object it references.

ORACLE 11 数据库的约束类型如下:

ORACLE 10 数据库的约束类型如下:

在oracle 官方文档http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm下

C      (check constraint on a table)
P      (primary key)
U      (unique key)
R      (referential integrity)
V      (with check option, on a view)
O      (with read only, on a view)

http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm

http://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_1044.htm#REFRN20047

C      Check constraint on a table
P      Primary key
U      Unique key
R      Referential integrity
V      With check option, on a view
O      With read only, on a view
H      Hash expression
F      Constraint that involves a REF column
S      Supplemental logging

对于H、S类型,尚不清楚情况,而且从上面我在11g数据库实验结果看,也没发现这两种类型。(有了解的朋友可以告知一二)

约束命名规范

约束名称建议自己定义一套命名规则,否则使用系统生成的约束名,很难能把它和对应的表、字段联系起来。

    非空约束     NN_表名_列名 
    唯一约束     UK_表名_列名
    主键约束     PK_表名
    外键约束     FK_表名_列名
    条件约束     CK_表名_列名
    默认约束     DF_表名_列名

如果约束名称超过32位长度,建议应该缩写表名,而不应用NN_表名_数字。不过具体视情况而定,很多时候 DF_表名_列名 这样命名,往往超出了32字符。所以有时候需要缩写表面或是采用其它规则。

约束操作

  约束管理

   创建各类约束

  先看一下如何创建主键约束

CREATE TABLE "DM"."DEPT"
(
               "DEPTNO"     NUMBER(2,0) PRIMARY KEY,
               "DNAME"      VARCHAR2(14),
               "LOC"        VARCHAR2(13)
)   TABLESPACE "TBS_DM_DAT" ;

COMMENT ON TABLE "DM"."DEPT" IS ‘部门表‘;                    

COMMENT ON COLUMN "DM"."DEPT"."DEPTNO"        IS  ‘部门编号‘;    

COMMENT ON COLUMN "DM"."DEPT"."DNAME"         IS  ‘部门名称‘;    

COMMENT ON CLOUMN "DM"."DEPT"."LOC"           IS  ‘部门所在地方‘;

此时它的约束名称是系统创建的。如图所示:

如果我们以下面的脚本创建,此时约束如下所示

 1 CREATE TABLE "DM"."DEPT"
 2 (
 3                "DEPTNO"           NUMBER(2,0)    ,
 4                "DNAME"           VARCHAR2(14)    ,
 5                "LOC"              VARCHAR2(13)    ,
 6                CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") USING INDEX TABLESPACE TBS_DM_IN
 7 )   TABLESPACE "TBS_DM_DAT" ;
 8
 9
10
11
12 COMMENT ON TABLE "DM"."DEPT" IS ‘部门表‘;
13
14 COMMENT ON COLUMN "DM"."DEPT"."DEPTNO"          IS  ‘部门编号‘;
15
16 COMMENT ON COLUMN "DM"."DEPT"."DNAME"            IS  ‘部门名称‘;
17
18 COMMENT ON CLOUMN "DM"."DEPT"."LOC"              IS  ‘部门所在地方‘;
19   

如果一个表的约束类型比较多,你会看到一堆SYS_CN这样的约束,如果不仔细核对后面的字段,很难一眼看出约束类型、约束对应字段。

主键约束的限制

文档原文如下: (翻译在下) 
  Restrictions on Primary Key Constraints Primary constraints are subject to the following restrictions:

  A table or view can have only one primary key.
  一个表或视图有且只有一个主键

  None of the columns in the primary key can be LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.
  主键字段不能为LOB、LOG、LOG RAW、VARRAY、NESTED TABLE、BFILE、REF、TIMESTAMP WITH TIME ZONE或用户定义类型。然而它可以包含TIMESTAMP WITH LOCAL TIME ZONE类型的字段。

  The size of the primary key cannot exceed approximately one database block.
  主键大小不能超过一个数据块大小。

  A composite primary key cannot have more than 32 columns.
  主键组合键不能超过32列。

  You cannot designate the same column or combination of columns as both a primary key and a unique key.
  你不能指定一列或组合列既是主键又是唯一键。

  You cannot specify a primary key when creating a subview in an inheritance hierarchy. The primary key can be specified only for the top-level (root) view.
  创建一个继承层次结构中的子视图时,你不能指定一个主键。主键可以唯一指定的顶层(根)视图。

原文地址:https://www.cnblogs.com/feiyun8616/p/9286384.html

时间: 2024-11-19 07:33:13

转 ORACLE约束总结的相关文章

Oracle约束的状态及验证机制

一.Oracle约束的状态 Oracle完整性约束的状态有4种,分别是ENABLE.DISABLE.VALIDATE.NOVALIDATE. ENABLE          表示Oracle将检查要插入或更新的数据库中的数据是否符合约束: DISABLE         表示表中可以存放违反约束的行: VALIDATE       表示数据库验证表中的已存在数据是否符合约束: NOVALIDATE  表示数据库不验证表中已存在数据是否符合约束. Oracle默认约束状态为ENABLE.VALID

Oracle约束状态

第一: oracle约束的4种状态: disable novalidate 既不会约束新增数据也不会验证已有数据,等同于disable enable novalidate 约束新增数据但不会验证已有数据 disable validate 约束新增数据但不会验证已有数据,启用后禁止DML enable validate 约束新增数据并验证已有数据,等同于enable 测试: --1.创建一个实验表 CREATE TABLE check_test AS SELECT * FROM scott.emp

oracle 约束

一.维护数据的完整性 概述:数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则.在Oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选. 1.约束 约束用于确保数据库数据满足特定的商业规则.在Oracle中,约束包括:not null.unique.primary key, foreign key和check五种. A.not null(非空) 如果在列上定义了not null

Oracle约束详解

一 约束的定义 约束是强加在表上的规则或条件.确保数据库满足业务规则.保证数据的完整性.当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作.约束可以是列一级别的 也可以是表级别的.定义约束时没有给出约束的名字,ORACLE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称.) 在ORACLE中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方

[Oracle]约束(constraint)

(一)约束的概念 在Oracle中,可以通过设置约束来防止无效数据进入表中.Oracle一共有5种约束: 主键约束(primary key) 外键约束(foreign key) 唯一性约束(unique) 非空约束(not null) 检查约束(check) (1)主键约束 --主键约束可以定义在一列或多列上,值具有唯一性.非空性: --在一个表上只能定义一个主键约束: --Oracle会自定在主键约束的列上创建唯一性索引,可以指定唯一性索引的位置及存储参数. (2)外键约束 --外键约束列的取

十五、oracle 约束

一.维护数据的完整性数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选. 二.约束约束用于确保数据库数据满足特定的商业规则.在oracle中,约束包括:not null. unique, primary key, foreign key和check 五种.1).not null(非空)如果在列上定义了not null,那么

oracle约束

oracle中提供了5种约束,目的:防止无效的或有问题的数据输入到表中,维护表的完整性 (1)非空(NOT NULL)约束,,定义的列不能为空 (2)唯一(UNIQUE)约束,表中每一行中所定义的列,列值不能相同 (3)主键(PRIMARY KEY)约束,唯一标识表中的一行 (4)外键(FOREIGN)约束,维系子表的主表的引用完整性 (5)条件(CHECK)约束,每行都要满足约束条件 约束关键字 constraint 完整性约束(主键约束) (1)建表时,在列中添加primary key cr

Oracle约束的使用

--5个约束,主键约束.外键约束.唯一约束.检查约束.非空约束. --添加主键约束 Alter table table_name Add constraints constraint_name Primary key (column_name); --语法说明 constraint_name:约束名称. column_name:主键约束指定数据表中的列名. --移除主键约束 Alter table table_name Drop constraint constraint_name; --外键约

oracle约束总结(not null/unique/primary key/foreign key/check)

约束(constraint):对创建的表的列属性.字段进行的限制.诸如:not null/unique/primary key/foreign key/check 作用范围: ①列级约束只能作用在一个列上 ②表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上) 定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义. - -NOT NULL:不为空约束,只能定义在列级 CREATE TABLE employees( employee_id NUMBER(6), --<sp