我正在尝试删除索引:
DROP INDEX PK_CHARGES
但我得到这个错误
无法删除用于强制执行唯一/主键的索引
为什么我收到此错误?如果您需要任何信息,我会提供更多信息。
如何解决?
编辑我在表中没有主键,但我发现了这个奇怪的索引,我不记得我添加了:
索引名称 = SYS_C0040476 具有相同的列
我正在尝试删除索引:
DROP INDEX PK_CHARGES
但我得到这个错误
无法删除用于强制执行唯一/主键的索引
为什么我收到此错误?如果您需要任何信息,我会提供更多信息。
如何解决?
编辑我在表中没有主键,但我发现了这个奇怪的索引,我不记得我添加了:
索引名称 = SYS_C0040476 具有相同的列
您可以查询ALL_CONSTRAINTS
性能视图以查看索引使用哪个约束,以及它适用于哪个表,例如:
select owner, constraint_name, constraint_type,
table_name, index_owner, index_name
from all_constraints
where index_name = 'PK_CHARGES';
我希望表名是“CHARGES”,约束名与索引名匹配,约束类型是“P”。但是,由于您有一个表格,因此名称可能没有遵循有用的约定。也许旧版本的表被重命名,这会留下对新名称的约束(例如CHARGES_BACKUP
或其他东西)。
你说你点击表格,然后点击视图。也许您没有查看约束/索引所在的表;或者您正在查看实际表格顶部的视图。您还提到了SYS_
同一列上的索引 - 不能在同一张表上。您是否有多个相似的表,或访问多个模式?您也应该为该索引运行上述查询。如上所述,您可能会找到该表的旧版本(或多个版本)。
一旦你确定了约束在哪个表上,你需要决定你是否应该真正保留它,如果不是,你可以通过使用ALTER TABLE
命令删除约束来删除它。
问题与
但是我发现了这个奇怪的索引,我不记得我已经添加了
来是因为你没有添加它。你有一个主键,然后你删除了它,但是当你这样做时,Oracle 不会删除每个主键都有的关联唯一索引。
因此,当您删除主键时,您必须删除该主键的唯一索引,该索引与主键具有相同的名称。
因此,要删除 MY_TABLE_PK 您必须执行以下操作:
ALTER TABLE MY_TABLE DROP PRIMARY KEY DROP INDEX;
所以你确保索引也被删除。
“从 pl/sql 我右键单击表格”
IDE 的问题在于它们让我们感觉非常高效,因为我们只需点击一下就可以完成工作,而无需编写一些代码。这是一个问题,因为当发生异常情况时,IDE 不利于调查,而且我们缺乏对数据库底层结构的理解,我们需要帮助自己。
如果你想学习 Oracle 数据库,你能做的最糟糕的事情就是下载 SQL Developer 或 PLSQL Developer 或 TOAD。它们都是很好的工具,但唯一应该使用它们的人是不需要使用它们的人。
以下对我有用的唯一索引:
ALTER INDEX UX_CHARGES UNUSABLE
/
DROP INDEX UX_CHARGES
/
请参阅:https ://docs.oracle.com/cd/E18283_01/server.112/e17120/indexes004.htm#insertedID3