读书人

唯一性目录和唯一性约束

发布时间: 2012-11-22 00:16:41 作者: rapoo

唯一性索引和唯一性约束

SQL> create unique index idx_uni_empno_copy on emp_copy(empno);

Index created.

注意这里的index_type不代表是否唯一性索引,要看UNIQUENESS 字段

SQL> select index_name,status,num_rows,index_type from user_indexes where table_name='EMP_COPY';

INDEX_NAME STATUS NUM_ROWS INDEX_TYPE
------------------------------ -------- ---------- ---------------------------
IDX_UNI_EMPNO_COPY VALID 14 NORMAL


SQL> alter table emp_copy add constraint cons_uni_empname unique(ename);

Table altered.

SQL> select index_name,status,num_rows,index_type from user_indexes where table_name='EMP_COPY';

INDEX_NAME STATUS NUM_ROWS INDEX_TYPE
------------------------------ -------- ---------- ---------------------------
IDX_UNI_EMPNO_COPY UNUSABLE 14 NORMAL
CONS_UNI_EMPNAME VALID 14 NORMAL

SQL> select index_name,status,num_rows,index_type,UNIQUENESS from user_indexes where table_name='EMP_COPY';

INDEX_NAME STATUS NUM_ROWS INDEX_TYPE
------------------------------ -------- ---------- ---------------------------
UNIQUENES
---------
IDX_UNI_EMPNO_COPY VALID 14 NORMAL
UNIQUE

CONS_UNI_EMPNAME VALID 14 NORMAL
UNIQUE

唯一性约束的索引不能直接删除,要先删除约束然后再删除对应的索引

SQL> drop index CONS_UNI_EMPNAME;
drop index CONS_UNI_EMPNAME
*
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key


SQL> alter table emp_copy drop constraint CONS_UNI_EMPNAME;

Table altered.

SQL> select index_name,status,num_rows,index_type,UNIQUENESS from user_indexes where table_name='EMP_COPY';

INDEX_NAME STATUS NUM_ROWS INDEX_TYPE
------------------------------ -------- ---------- ---------------------------
UNIQUENES
---------
IDX_UNI_EMPNO_COPY VALID 14 NORMAL
UNIQUE


SQL> drop index IDX_UNI_EMPNO_COPY ;

Index dropped.





解决ORA-02429和ORA-02297错误 (2007-09-19 16:43:22)转载
标签: 杂谈分类: MSN搬家
 解决了两个错误:
ORA-02429: cannot drop index used for enforcement of unique/primary key
ORA-02297: cannot disable constraint (XXX_DJCM.PK_CONTAINER) - dependencies exist

  开发的同事说有一索引已经无用,要求删除,那知道执行的时候出错:
SQL>drop index CONTAINER_I_CONTAINER_REF_NO_C;
ORA-02429: cannot drop index used for enforcement of unique/primary key

SQL>ALTER TABLE CONTAINER MODIFY PRIMARY KEY DISABLE;
ORA-02297: cannot disable constraint (XXX_DJCM.PK_CONTAINER) - dependencies exist

SQL>select owner, CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE
from user_constraints
where table_name = 'CONTAINER';
SQL>alter table CONTAINER disable constraint PK_CONTAINER cascade;
SQL>ALTER TABLE CONTAINER MODIFY PRIMARY KEY DISABLE;
-- Drop indexes
SQL>drop index CONTAINER_I_CONTAINER_REF_NO_C;
SQL>ALTER TABLE CONTAINER MODIFY PRIMARY KEY ENABLE;
SQL>alter table CONTAINER ENABLE constraint PK_CONTAINER;

读书人网 >其他数据库

热点推荐