Oracle 约束(constraint)
2017/10/1 19:26:14

(一)约束的概念
在Oracle中,可以通过设置约束来防止无效数据进入表中。Oracle一共有5种约束:  主键约束(primary key) 外键约束(foreign key) 唯一性约束(unique) 非空约束(not null) 检查约束(check) 
(1)主键约束
--主键约束可以定义在一列或多列上,值具有唯一性、非空性;
--在一个表上只能定义一个主键约束;
--Oracle会自定在主键约束的列上创建唯一性索引,可以指定唯一性索引的位置及存储参数。
(2)外键约束
--外键约束列的取值来源于参照表(父表)的参照列的值,或者空值;
--定义外键约束的列只能参照父表的主键约束列和唯一性约束列;
--父表与子表必须在同一个数据库中。
(3)唯一性约束
--可定义在一列或多列上,列的取值必须唯一;
--如果在某些列上定义了唯一性约束,而没有定义非空约束,那么在这些列上可以出现多个空值;
--Oracle会自定在主键约束的列上创建唯一性索引,可以指定唯一性索引的位置及存储参数。
(4)非空约束
--只能定义在列上;
--在同一个表中可定义多个非空约束。
(5)检查约束
--检查约束用来限制列的取值范围,其表达式必须引用相应列,表达式的计算结果是一个布尔值;
--一个列可以定义多个检查约束
(二)列级约束与表级约束
列级约束是对某一个特定列的约束,包含在列的定义中,直接跟在其它定义之后,不需要指出列名。其语法为: 
column_definition [CONSTRAINT constraint_name] constraint_type ... 
表级约束的定义与列的定义相互独立,通常用于多列组合的约束,定义表级约束要指出约束的名称。其语法为: 
[CONSTRAINT constraint_name] constraint_type(column1,[column2...]); 
需要注意的是,除了非空约束只能定义列级约束外,其他的均可定义列级/表级约束。
(三)约束的状态
根据在数据插入、更新时是否对数据进行约束检查,约束状态分为激活状态(ENABLE)和禁用状态(DISABLE);
根据是否对表中已有数据进行约束检查,约束状态分为验证状态(VALIDATE)和非验证状态(NOVALIDATE);
组合之后,一共有四种约束状态:   
约束状态 
定义 
特点    激活验证状态
(ENABLE VALIDATE) 激活约束且约束检查已有数据 对表中已有数据进行检查,对后续插入、更新的数据也会进行检查  激活非验证状态
(ENABLE NOVALIDATE) 激活约束但是不检查表中已存在的数据 不检查目前表中已经存在的数据,但会检查后续插入、更新的数据  禁用验证状态
(DISABLE VALIDATE) 不激活约束但是会去检查表中已经存在的数据 Oracle不允许进行任何DML(insert/update/delete)操作,因为操作无法得到约束的检查。表处于只读模式  禁用非验证状态
(DISABLE NOVALIDATE) 不激活验证且不检查表中已有的数据 不会对表中数据进行约束检查,也不会对新插入的数据进行约束检查   
(四)创建约束
(1)创建列级约束
创建列级约束的语法为:   
INITIALLYCONSTRAINT constraint_name                          --约束名 [                                                            --选择5中约束类型  [NOT] NULL            |  [UNIQUE]              |  [PRIMARY KEY]          |  [CHECK (condition)]    |  [REFERENCES [schema.]object[(column)]  [ON DELETE CASCADE | SET NULL]]  ] [                                                            --是否延迟约束检查  [NOT DEFERRABLE]      |  [DEFERRABLE [INITIALLY IMMEDIATE | DEFERRED]] ] [ENABLE | DISABLE]                                            --定义约束检查的类型 [VALIDATE | NOVALIDATE ]  [USING INDEX index_clause]                     

下一页
返回列表
返回首页
©2017 Linux公社 - Linux系统门户网站 电脑版