2.修正约束数据 , ?, W. m/ q7 c
当给一个表作主键约束时,因为已存数据不满足约束规则,会提示错误信息,些时必须对数据进行修正
8 n- n& X) l% ]; A7 e 要修正数据先找出不满足约束的数据 ; X% L1 f5 U) T7 f
如下表,有不满足约束的数据
+ E9 W! H/ j' W' k9 q4 z2 J SQL> select * from t;
; m$ z7 l7 h6 y1 w6 I I V 6 v* d: H( L; a6 P( l1 F# x' s
---------- ------------------------
, m! v5 Q9 D- ~( E! e 1 2 / E9 W! ?" ^6 ^* e0 J2 F
3 4 9 c$ Q% I# h" k5 A; i j6 [/ _
1512 : Z- N7 j- Q6 h8 j$ O2 C. K
15 10
- [ v8 F8 }) u 如果一个表数据量多可通过如下方法查找
4 D1 f( v: u( J9 O SQL> alter table t drop constraint pk_i;
9 @7 \7 |: y) A& G( ^4 d6 \1 Q- o5 F. K Table altered. 7 J* o6 q5 A% L v" i" g
SQL>conn y / 123
$ r$ [1 Y5 @: [ SQL> @$ORACLE_HOME/rdbms/admin/utlexcpt.sql 6 S: M' C) O0 l2 J$ j! W
Table created. - \/ K5 s0 ]/ f2 y% Q# t
SQL> alter table t add constraint pk_i primary key (i) exceptions into exceptions;
1 K/ `/ V+ _) D" }8 B select * from t where rowid in (select row_id from exceptions) # g F6 Z" A' {, c9 B' m
I V * x |) }: _8 T
---------- ------------------------ . ]: L* M. ?1 D( h3 ]. q
1512 * `. k+ B" P8 |* r+ W, Y% U3 q% _
1510
/ P. Q8 I. c+ n ` 找到了重复的记录 3 `/ m7 M5 P1 L
修正
7 x1 A+ H( M" i- i1 z/ t SQL>update t set i=10 where v=12; 9 n) N- d2 |% [: i
SQL> select * from t;
- q+ g3 Q6 b, U6 M6 ^8 B% U; t6 o/ z8 r I V
' ^0 P4 v2 d# |5 Q: G) I6 p ---------- ---------- * n( m5 ?8 p6 e2 L3 l5 |1 v/ U0 R
1 2
& t1 X. ?# r/ k 3 4 5 {, E! W8 }/ \, i# [4 r
10 12
9 p4 |! r M2 E" q9 F9 ^2 n D' q; F 15 10
' z) D6 ^1 P9 H) p* e 再建主键约束 7 Q4 {, Y$ h( T6 x, ^. \7 v
alter table t add constraint pk_i primary key (i) 3 A% {9 r G' b" Y5 r w8 s) X
Table altered.
7 d3 ], y2 `3 Y8 ^6 \) n 成功了!!! |