【问题标题】:Enforcement of unique/primary key - drop index执行唯一/主键 - 删除索引
【发布时间】:2013-07-15 07:18:15
【问题描述】:

我正在尝试删除索引:

DROP INDEX PK_CHARGES

但我收到此错误

无法删除用于强制执行唯一/主键的索引

为什么我会收到此错误?如果您需要任何信息,我会提供更多信息。

如何解决?

编辑我在表中没有主键,但我发现了这个奇怪的索引,我不记得我添加了:

索引名称 = SYS_C0040476 具有相同的列

【问题讨论】:

  • 因为索引用于强制执行主键(我猜,来自名称中的 PK),就像消息中所说的那样?你为什么要放弃它?
  • 您是否调查过使用索引的唯一/主键的执行情况?如果有,你发现了什么?
  • @AlexPoole 我正在尝试删除索引,但我没有主键
  • 确实有一个主键@Moudiz...就是这么说的。
  • @ben from pl/sql 我右键单击表格,单击视图,转到名为“键”的选项卡,它是空的。

标签: oracle primary-key unique-index


【解决方案1】:

您可以查询ALL_CONSTRAINTS performance view 以查看索引被哪个约束使用,以及它适用于哪个表,例如:

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 命令删除约束来删除它。

【讨论】:

  • 我没有在我的架构中找到该名称是否正常?我的意思是我的结果是:owner:different schema , constrant name=pk_charges.... 但在我的模式中我没有找到我的约束名称
  • 顺便说一句,所有类型都是 P
  • @Moudiz - 这取决于您的环境。如果您处于开发环境中,人们拥有自己的对象副本,那么这并不罕见。但在这种情况下,如果它属于其他人,您可能不应该首先尝试删除索引/约束。
  • 感谢您的帮助,alex 我发现问题出在另一张桌子上,我看错了桌子
【解决方案2】:

问题

但是我发现了这个奇怪的索引,我不记得我已经添加了

来是因为你没有添加它。你有一个主键,然后你删除了它,但是当你这样做时,Oracle 不会删除每个主键都有的关联唯一索引。

因此,当您删除主键时,您必须删除该主键的唯一索引,该索引与主键的名称惊人地相同。

因此,要删除 MY_TABLE_PK,您必须这样做:

ALTER TABLE MY_TABLE DROP PRIMARY KEY DROP INDEX;

所以你确保索引也被删除。

【讨论】:

    【解决方案3】:

    “从pl/sql我右键点击表格”

    IDE 的问题在于它们让我们感觉非常高效,因为我们只需单击一下即可完成操作,而无需编写一些代码。这是一个问题,因为当发生异常情况时,IDE 不利于调查,而且我们缺乏对数据库底层结构的理解,我们需要帮助自己。

    如果你想学习 Oracle 数据库,你能做的最糟糕的事情就是下载 SQL Developer 或 PLSQL Developer 或 TOAD。它们都是很好的工具,但唯一应该使用它们的人是不需要使用它们的人。

    【讨论】:

    • APC 这并不意味着如果我使用右键单击表格意味着我正在“学习 oracle”,因为您的意思是 IDE 可以快速显示内容,我的问题和错误是从代码和查询中显示出来的。你的评论是不恰当的,因为你不知道我的背景,所以你不能评判我
    • “如果你想学习 [Oracle],你能做的最糟糕的事情就是下载 SQL Developer...”等等。这根本不是真的。 IDE 为您提供了一个很大的起点——从一无所知到获得熟悉的界面原则的指导以帮助您了解基础知识,直到您有机会全面了解。我相信您的评论看起来像是在试图贬低谁开始使用除基本文本编辑器之外的任何东西进行编码!
    【解决方案4】:

    以下对我有用的唯一索引:

    ALTER INDEX UX_CHARGES UNUSABLE
    /
    
    DROP INDEX UX_CHARGES
    /
    

    见:https://docs.oracle.com/cd/E18283_01/server.112/e17120/indexes004.htm#insertedID3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2010-10-03
      • 2016-07-06
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多