ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE 约束

ORACLE 约束

原创 Linux操作系统 作者:tomshenhao 时间:2011-09-15 16:37:33 0 删除 编辑
 

查看:

select * from user_constraints;

select * from dba_constraints;

约束状态:

1. 针对新数据:disable / enable

2. 针对老数据:validate / novalidate

enable validate:所有数据均需要检查;默认创建Index

disable validate:禁止对该表使用DML

3. 是直接检查还是commit检查:deferrable (alter session set constraint=deferred/nodeferred) 

如果表中数据有重复,但是还是希望在上面建主键约束

例如:表名 test;列名:id;id列中有重复值

目标将id建成主键

1. 创建索引:

create index id_in on test(id)

2. 创建主键:

alter table test add constraint id_pk PRIMARY KEY (id) enable novalidate;

之后如果id列修改好了,没有重复值

可以修改约束属性:

alter table test modify constraint id_pk enable validate;

约束检查方式:

DML后马上检查:默认设置

Commit后检查:

1. 创建时添加参数deferrable

例如:alter table test add constraint id_pk primary key(id) deferrable;

2. 设置检查时间

针对constraint

DML 之后查:set constraint id_pk immediate;

commit后查:set constraint id_pk deferred;

针对session

DML 之后查:alter session set constraint=immediate;

commit后查:alter session set constraint=deferred;

约束类型:

1.NOT NULL:该列不能包含空值;使用select 方式创建新表,只有not null约束会自动复制到新表。
写法:alter table DEPT modify DEPTNO not null;
      alter table DEPT modify DEPTNO null;

增加新列,有not null属性,必须有default值:alter table test add price number(8,2)default 0 not null;

2.UNIQUE:该列或列组合对于表所有行必须唯一;不能和NOT NULL同时定义,需要逐个添加;该列可以有NULL值

写法:alter table DEPT add constraint dname unique (DNAME,DEPTNO);
      alter table DEPT drop constraint dname;
      alter table DEPT disable/enable constraint dname;

3.PRIMARY KEY:唯一标示表中的每一行;默认NOT NULL
写法:alter table DEPT_1 add constraint DEPTNO_PK PRIMARY KEY (DEPTNO);
      alter table DEPT_1 drop constraint DEPTNO_PK cascade; 
      alter table DEPT_1 disable constraint DEPTNO_PK cascade;
      alter table DEPT_1 enable constraint DEPTNO_PK cascade;
     
4.FOREIGN KEY:该列和被引用表的列之间建立关系;

特点:

1. 外键必须建立在有主键约束或者唯一约束的列上;

2. 默认不可以删改,可通过添加属性来处理;

3. 建议加上Index,提升性能;

4. 该列可以有NULL值


写法:alter table dept_1 add constraint deptno_fk FOREIGN KEY (DEPTNO) REFERENCES EMP(EMP_ID);
      alter table dept_1 drop constraint deptno_fk;
      alter table dept_1 disable constraint deptno_fk;
      alter table dept_1 enable constraint deptno_fk;

5.CHECK:指定条件必须为真;
写法:alter table dept add constraint abc check (dname is not null);
      alter table dept drop constraint abc;
      alter table dept disable constraint abc;
      alter table dept enable constraint abc;
     
Top-N 例子
SELECT ROWNUM as SENIOR, E.last_name, E.hire_date
FROM (SELECT last_name,hire_date FROM employees ORDER BY hire_date)E
WHERE rownum <=4

约束关联:

当主键被disable后,与他相关的外键也随之失效;

当主键被重新enable后,与他相关的外键需要手工enable,才能重新生效。

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

上一篇: ORACLE JOIN 与 +
下一篇: ORACLE 表
请登录后发表评论 登录
全部评论

注册时间:2011-07-14

  • 博文量
    260
  • 访问量
    398711