oracle检查约束默认为男,ORACLE 约束

查看:

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,才能重新生效。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值