ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 约束管理

约束管理

原创 Linux操作系统 作者:lqding1980 时间:2008-10-17 14:59:32 0 删除 编辑
约束种类:
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博客 ” ,链接:https://blog.itpub.net/8858072/viewspace-471561/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-12

  • 博文量
    12
  • 访问量
    38241