写这篇的目的是为了自己以后更好的复习,很多都是参照网上的。
oracle约束可以检查出不符合业务的需求
Oracle约束按约束状态又可分为disable novalidate,disable validate,enable novalidate,enable validate. 其中disable/enable代表是否启用约束,validate/novalidate代表启用约束时是否对表中原有数据作检查。
1.创建表
create table t1(
id number,
name varchar2(20));
insert into t1 values(1,'A');
insert into t1 values(1,'B');
commit
2.添加约束条件(约束条件很多,check,NOT NULL 等) 准备在下篇中详细介绍
alter table t1 add constraint pk_t1 primary key (id) deferrable enable novalidate;
此时主键已经生效,但源表中包含不符合约束的数据
3.如果将约束状态更改为 enable validate,却发现原有数据有问题
alter table t1 enable validate constraint pk_t1;(会报错)
4.建立一个异常表(这两种都可以的)
SQL>@D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlexpt1.sql
create table exceptions(row_id rowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
5.然后将异常数据插入异常表
alter table t1 enable validate constraint pk_t1 exceptions into exceptions;
6.根据对应表找出对应的异常数据进行修改
select id,name from t1 where rowid in(
select row_id from exceptions) FOR UPDATE;