ORA-02429: cannot drop index used for enforcement of unique /primary key

本文介绍ORA-02429错误的原因及解决办法,该错误发生于尝试直接删除Oracle数据库中用于唯一/主键约束的索引时。文章通过实例演示了如何正确删除此类索引。

中文:

  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' --无记录返回,主键约束被删除,索引即被删除
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值