您的位置:首页 > 数据库 > Oracle

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;
上面语句执行成功,需要有下面这个前提基础;
 
约束延迟检查通常是用在外键列上的;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle archive delete null