2.修正约束数据 1 m- x" I. e8 ^0 {" \
当给一个表作主键约束时,因为已存数据不满足约束规则,会提示错误信息,些时必须对数据进行修正 3 T# e5 f! E/ x- X, y
要修正数据先找出不满足约束的数据 3 R! _ q1 R' K0 ~2 M/ U
如下表,有不满足约束的数据 % Z' d, V p, r, q% ?
SQL> select * from t;
1 s' F' K/ Y: F I V 2 Y/ v+ j6 z. t$ R1 i1 \
---------- ------------------------ 2 Z* H, F2 y2 ^; @
1 2
0 S" P; \( V d s, I& ? 3 4
) S) r& E, r- e# C 1512
9 O, l$ \; @/ k) o; ] 15 10
/ n$ x3 G7 s4 T$ t7 f j1 K/ C. Y 如果一个表数据量多可通过如下方法查找
9 |3 Y4 a. m# @8 d0 i% D SQL> alter table t drop constraint pk_i;
2 w' `3 z5 P* [; q! ? Table altered.
: e H- J, T2 S4 c& r SQL>conn y / 123 , `3 l+ P, a" Q- \" [6 R
SQL> @$ORACLE_HOME/rdbms/admin/utlexcpt.sql 1 C ?. _% C _. l4 J6 m9 H, w
Table created.
$ Q' V; a6 z+ i& I3 X SQL> alter table t add constraint pk_i primary key (i) exceptions into exceptions;
% |" P b: ~4 X: |& b; ^ select * from t where rowid in (select row_id from exceptions) + E! V" {/ P O1 a2 y
I V
' E1 R/ h; w% o/ `+ f7 ?5 u- ] ---------- ------------------------
) _2 `: P, t/ \- e( m$ L, k9 e" K 1512
6 G9 x+ }" C8 v4 `4 E 1510
4 d& C2 r/ ~; r v 找到了重复的记录 % g1 t, g7 Q; P! y' r+ ~7 ~
修正 & M3 P& d/ C- L: {( y7 g) L
SQL>update t set i=10 where v=12;
" Z1 m! B* e3 a; G& Y' G* o0 E SQL> select * from t;
+ d/ M8 b& m- a I V
- p O M5 Z! P: _5 F8 t ---------- ---------- 3 m) o6 Z! a" I& `+ X
1 2
' o8 Y Y$ z: `$ R7 Y/ j3 k1 t$ o 3 4
6 V/ O |- ?& S9 G" W 10 12
8 j1 f/ m) H/ U5 U+ m ^4 M0 Z6 I 15 10 8 F5 [7 V$ F6 Q
再建主键约束
$ w# E/ f0 p: Q" l9 o$ @' N alter table t add constraint pk_i primary key (i) ) j! l/ t) x+ B3 v$ V8 d# q- L9 X
Table altered.
4 Z0 Y8 p0 F0 f9 j3 Z 成功了!!! |