数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

TIP 如何为表加唯一约束(保存或者删除冗余的数据)


发布日期:2023年01月06日
 
TIP 如何为表加唯一约束(保存或者删除冗余的数据)

前几天还被人问起有没有什么方法在已有冗余的表上加唯一约束; 当然要删除冗余的数据了;我告诉他

SELECT * FROM emp a

WHERE rowid > ANY

(SELECT rowid FROM emp b

WHERE aename = bename

)

可以找到冗余的数据

今个发现还有一个比较简便的方法如下使用 exceptions into exceptions;

SQL> create table t ( a int b int c int );

表已创建

SQL> insert into t select rownumrownum+rownum+ from all_objects where rownum

<;

已创建

SQL> insert into t select *from t where rownum<;

已创建

SQL> commit;

提交完成

SQL> select *from t;

ABC

已选择

SQL> create table exceptions(row_id rowid

owner varchar()

table_name varchar()

constraint varchar());

表已创建

SQL>

SQL> alter table t add constraint t_unique

unique(abc) exceptions into exceptions;

alter table t add constraint t_unique

*

ERROR 位于第 行:

ORA: 无法验证 (EPUSERT_UNIQUE) 未找到重复关键字

SQL> create table dups

as select *from t where rowid in (select row_id from exceptions);

表已创建

SQL> select *from dups;

ABC

SQL> select row_id from exceptions;

ROW_ID

AAAIEJAAKAAAyMSAAA

AAAIEJAAKAAAyMSAAE

AAAIEJAAKAAAyMSAAB

AAAIEJAAKAAAyMSAAF

SQL> delete from t where rowid in ( select row_idfrom exceptions );

已删除

SQL> insert into t select distinct * from dups;

已创建

SQL>

SQL> commit;

提交完成

SQL> select *from t;

ABC

上一篇:Oracle索引(index)简单介绍

下一篇:Oracle10g新特性:利用外部表卸载数据