代码之家  ›  专栏  ›  技术社区  ›  TomáÅ¡ Záluský

Oracle alter table drop constraint drop index在语法上有效吗?

  •  5
  • TomáÅ¡ Záluský  · 技术社区  · 7 年前

    我有Oracle 11.2.0.2.0和一个具有唯一约束的表,该约束由以下脚本创建:

        create table foo (id varchar(26) not null, name varchar(50) not null);
        alter table foo add constraint pk_foo primary key (id);
        /**/
        alter table foo add constraint un_foo unique (name); 
    

    我需要去掉唯一约束,这很容易:

        alter table foo drop constraint un_foo;
    

    问题是:当数据库在SQL Developer中备份并恢复时,则 un_foo 唯一索引由创建 明确的 命令位于 /**/ 行:

        CREATE UNIQUE INDEX un_foo ON foo (name);
    

    上述alter命令不会删除这种显式创建的索引。我意识到以下命令工作:

        alter table foo drop constraint un_foo drop index;
    

    alter table foo drop primary key drop index 在中 documentation 或在 Oracle Developer Community discussion . 而且 this answer at AskTom 也使用此语法(对于 keep index ). 然而,我在铁路图中看不到任何关于这种语法的推理 alter table 命令

    问题:是语法吗 alter table foo drop constraint un_foo drop index 合法的如果是这样,基于铁路图中的哪些文件或流程?如果没有,为什么命令没有失败?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  3
  •   TomáÅ¡ Záluský    7 年前

    根据@ Chris Saxon 的答案 my equivalent question posted to AskTom

    我个人决定依赖语法,因为除其他外,我的Oracle支持中也建议使用语法。

    如果需要绝对安全(阅读:符合文件),唯一的可能性是使用声明 alter table foo drop unique (name) drop index; .

    我在中总结了围绕这个问题的情况(不太重要) blogpost (捷克语)。