Oracle约束概述
2011-07-25 09:56
190 查看
执行一条语句如果违反约束条件,这条语句之前成功的记录也会一起被回滚掉;
约束的类型
UNIQUE
NOT NULL
PRIMARY KEY
FOREIGN KEY
CHECK
如果父表和子表之间存在外键关系,如果子表中有记录引用父表,那么删除父表中的记录将会发生错误,这可以通过两种方式解决,在创建约束的时候加上相关的子句:
ON DELETE CASCADE:删除父表记录的同时,子表中与其相关的记录也被删除
ON DELETE SET NULLL:删除父表记录的时候,子表中河父表相关的列值被置为NULL,但是如果子表在该列上定义了NOT NULL约束,那么父表的删除操作将失败;
删除表的操作也同样适用上述条件;
约束的状态
ENABLE VALIDATE:最理想的状态,数据都合规
DISABLE NOVALIDATE:在批量导入数据的时候有用
ENABLE NOVALIDATE
DISABLE VALIDATE
例子:
--在有约束条件的情况下,批量导入的例子
ALTER TABLEsales_archive MODIFY CONSTRAINT sa_nn1 DISABLE NOVALIDATE;
INSERT INTOsales_archive SELECT * FROM sales_current;
ALTER TABLEsales_archive MODIFY CONSTRAINT sal_nn1 ENABLE NOVALIDATE;
UPDATE sales_archiveSET channel='NOT KNOW' WHERE channel IS NULL;
ALTER TABLEsales_archive MODIFY CONSTRAINT sa_nn1 ENABLE VALIDATE;
约束检查
约束可以在语句执行时被检查(anIMMEDIATE constraint——默认情况
也可以在语句在提交时被检查(anDEFERRED constraint)
--改变约束的检查方式,和上例的语句达到相同的效果
SET CONSTRAINT sa_nn1deferredl
INSERT INTOsales_archive SELECT * FROM sales_current;
UPDATE sales_archiveSET channel='NOT KNOW' WHERE channel IS NULL;
COMMIT;
SET CONSTRAINT sa_nn1IMMEDIATE;
上面语句执行成功,需要有下面这个前提基础;
约束延迟检查通常是用在外键列上的;
约束的类型
UNIQUE
NOT NULL
PRIMARY KEY
FOREIGN KEY
CHECK
如果父表和子表之间存在外键关系,如果子表中有记录引用父表,那么删除父表中的记录将会发生错误,这可以通过两种方式解决,在创建约束的时候加上相关的子句:
ON DELETE CASCADE:删除父表记录的同时,子表中与其相关的记录也被删除
ON DELETE SET NULLL:删除父表记录的时候,子表中河父表相关的列值被置为NULL,但是如果子表在该列上定义了NOT NULL约束,那么父表的删除操作将失败;
删除表的操作也同样适用上述条件;
约束的状态
ENABLE VALIDATE:最理想的状态,数据都合规
DISABLE NOVALIDATE:在批量导入数据的时候有用
ENABLE NOVALIDATE
DISABLE VALIDATE
例子:
--在有约束条件的情况下,批量导入的例子
ALTER TABLEsales_archive MODIFY CONSTRAINT sa_nn1 DISABLE NOVALIDATE;
INSERT INTOsales_archive SELECT * FROM sales_current;
ALTER TABLEsales_archive MODIFY CONSTRAINT sal_nn1 ENABLE NOVALIDATE;
UPDATE sales_archiveSET channel='NOT KNOW' WHERE channel IS NULL;
ALTER TABLEsales_archive MODIFY CONSTRAINT sa_nn1 ENABLE VALIDATE;
约束检查
约束可以在语句执行时被检查(anIMMEDIATE constraint——默认情况
也可以在语句在提交时被检查(anDEFERRED constraint)
--改变约束的检查方式,和上例的语句达到相同的效果
SET CONSTRAINT sa_nn1deferredl
INSERT INTOsales_archive SELECT * FROM sales_current;
UPDATE sales_archiveSET channel='NOT KNOW' WHERE channel IS NULL;
COMMIT;
SET CONSTRAINT sa_nn1IMMEDIATE;
上面语句执行成功,需要有下面这个前提基础;
约束延迟检查通常是用在外键列上的;
相关文章推荐
- Oracle --- 约束(1)
- Oracle约束
- oracle 查看主外键约束
- Oracle中查看无效的对象、约束、触发器和索引
- Oracle 约束(constraint)的几个参数的小研究
- Oracle创建约束
- SharePlex for Oracle概述
- oracle 表结构、表字段、表中数据、主键约束的相关操作
- 源码-Oracle数据库管理-第六章-索引和约束-约束部分-Part 3
- Oracle 序列的创建与运用 内含约束补充内容
- oracle 查看主外键约束
- Oracle约束的4种状态小结
- ORACLE 外键约束对NULL的处理
- Oracle中的约束
- Oracle外键约束修改行为(五)
- Oracle Constraint 约束
- Oracle常用命令_约束
- Oracle PL/SQL之ENABLE NOVALIDATE约束
- oracle:PK,Fk,联合主键,NOTNULL 约束详解
- 20180331:Oracle中的视图(view)、索引(index)、约束(constraint)、序列(sequence)