约束管理

约束种类:
1. Not Null  ;
2.CHECK ; 
3 UNIQUE ; 
4. PRIMARY KEY ; 
5 Foreign key ;

约束的相关信息可以从dba_constraints或者user_constraints 表中查询。
SQL> select table_name,constraint_name,constraint_type,status,deferrable,deferred,validated from user_constraints;
E           SYS_C005184   C ENABLED  NOT DEFERRABLE IMMEDIATE VALIDATED
EMP      FK_DEPTNO      R ENABLED  NOT DEFERRABLE IMMEDIATE VALIDATED
DEPT    PK_DEPT           P ENABLED  NOT DEFERRABLE IMMEDIATE VALIDATED
EMP      PK_EMP              P ENABLED  NOT DEFERRABLE IMMEDIATE VALIDATED
E           SYS_C005183   C DISABLED NOT DEFERRABLE IMMEDIATE NOT VALIDATED

5 rows selected.

约束的状态:
约束的状态表现在两个方面
  1. enable 和 disable:这个表示在约束创建以后,对表做insert或者update操作时,对新进或者修改后的数据进行校验。以判断是否违反约束,enable表示是,disable表示否。
  2. validate 和 novalidate:这个表示约束创建时,是否对表中现有数据进行校验。以判断是否违反了约束,validate表示是,novalidate表示否。
对这两方面进行排列组合,就导致了约束存在下列四种状态
  1. enable validate :表示新进和表中已有数据都校验。
  2. enable novalidate :表示不校验存在的数据,只校验新进的数据。
  3. disable novalidate :这种状态相当于没有创建约束。
  4. disable validate :不校验新进数据,但是要校验已有数据。这是一种矛盾的状态,所以表有了这样的约束时,不允许对表做DML操作。
一个constraint被创建时,默认的状态为 enable validate 。
create table employees as select * from emp where 1=2;

alter table employees add constraint u_empno unique(empno);

SQL> select table_name,constraint_name,status,validated from user_constraints where table_name='EMPLOYEES';
EMPLOYEES          U_EMPNO       ENABLED  VALIDATED

SQL> 
这些状态各表示什么意思呢?
enable 、disable 选项针对新进数据、validate、novalidate针对老数据。
现在做实验验证一下:
create table ee as select * from emp;
insert into ee select * from ee;
此时,表ee中empno列存在了重复的值。我们在empno列上创建一个unique约束。
SQL> alter table ee add constraint u_ee_empno unique(empno);
alter table ee add constraint u_ee_empno unique(empno)
                              *
ERROR at line 1:
ORA-02299: cannot validate (SCOTT.U_EE_EMPNO) - duplicate keys found

因为默认的约束状态为 ENABLED  VALIDATED ,所以约束创建之初要验证表中老数据,创建失败。那我们现在创建 ENABLE NOVALIDATE的约束试试看。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8858072/viewspace-471561/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8858072/viewspace-471561/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值