ORA-02429: cannot drop index used for enforcement of unique /primary key
中文:
ORA-02429: 无法删除用于强制唯一/主键的索引
原因:
用户试图删除一个用于强制唯一/主键的索引
由于索引是在创建主键约束后自动创建的,因此直接删除索引是不可以的,所以要想删除索引需先删除主键,索引随即就会被删除
解决方案:
不直接删除索引,而是直接删除主键约束,删除主键约束后,索引即自动会被删除
示例:
1) 创建测试用表
CREATE TABLE TAB_TEST ( ID VARCHAR2(20 BYTE), NAME VARCHAR2(20 BYTE), CITY VARCHAR2(10 BYTE) )
2) 创建主键约束
ALTER TABLE TAB_TEST ADD CONSTRAINT PK_TAB_TEST PRIMARY KEY (ID,NAME)
3) 查询约束和索引
SELECT CONSTRAINT_NAME FROM DBA_CONSTRAINTS WHERE TABLE_NAME='TAB_TEST' --返回创建的主键约束 SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='TAB_TEST' --创建主键约束,索引即被创建
4) 直接删除索引
DROP INDEX PK_TAB_TEST --报错,ORA-02429: 无法删除用于强制唯一/主键的索引
5) 删除主键约束
ALTER TABLE TAB_TEST DROP CONSTRAINT PK_TAB_TEST
6) 查询约束和索引
SELECT CONSTRAINT_NAME FROM DBA_CONSTRAINTS WHERE TABLE_NAME='TAB_TEST' --无记录返回,创建的主键约束被删除 SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='TAB_TEST' --无记录返回,主键约束被删除,索引即被删除