Oracle keep index

本文通过实验演示了在Oracle数据库中删除唯一约束的同时保留索引的方法。分别对比了不使用和使用keepindex语法时的不同结果,强调了在删除约束时保留索引的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个表的主键使用了唯一索引,我直接用

alter table xxx drop constraints pk_xxx;

删除主键,DB扫描时提示说删除约束时必须指定keep index保留索引。

百度了一下,看到了http://zhaolinjnu.i.sohu.com/blog/view/75962031.htm这篇文章。

下面是它的原文:

我们通常的操作是向表中的一列或几列添加一个唯一约束,但有些时候,因为应用方面的原因或者其它原因,我们又需要把约束删掉,但要保留索引.本篇文章就介绍了如何使用keep index的语法,请看下面的实验:

1.不使用keep index的语法来删除约束的情况:

SQL> create table t1(id number,nick varchar2(20));

 Table created.

SQL> alter table t1 add constraint uk_t1_id unique(id);

 Table altered.

 SQL> select table_name,index_name from user_indexes where table_name='T1';

 TABLE_NAME                     INDEX_NAME

------------------------------ ------------------------------

T1                             UK_T1_ID

 SQL> alter table t1 drop constraint uk_t1_id;

 Table altered.

 SQL> select table_name,index_name from user_indexes where table_name='T1';

 no rows selected

 2.使用keep index的语法来删除约束的情况 

SQL> alter table t1 add constraint uk_t1_id unique(id);

 Table altered.

SQL> select table_name,index_name from user_indexes where table_name='T1';

 TABLE_NAME                     INDEX_NAME

------------------------------ ------------------------------

T1                             UK_T1_ID

SQL> alter table t1 drop constraint uk_t1_id keep index;

 Table altered.

SQL> select table_name,index_name from user_indexes where table_name='T1';

 TABLE_NAME                     INDEX_NAME

------------------------------ ------------------------------

T1                             UK_T1_ID

 

    如果在创建约束前,先创建了索引;那么在删除约束时默认都只删除约束,而不会删除索引.如果你想在删除约束时,保留索引,我建议还是最好明确使用keep index的语法,以避免意想不到的问题发生.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值