Oracle约束概述

执行一条语句如果违反约束条件,这条语句之前成功的记录也会一起被回滚掉;

约束的类型

  • 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;

上面语句执行成功,需要有下面这个前提基础;

 

约束延迟检查通常是用在外键列上的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值