【问题标题】:Drop foreign-key constraint删除外键约束
【发布时间】:2014-09-08 07:07:59
【问题描述】:

如果我在创建过程中没有命名外键,如何删除它

create table abc(
id number(10),
foreign key (id) references tab(roll)
);

甚至

 alter table abc drop foreign key mn_ibfk_1;

不适合我。我正在使用 Oracle 10g。

【问题讨论】:

  • 请添加错误信息!
  • 它说缺少关键字!!
  • table _ibfk_1 是给定的默认名称我在这里吗??
  • 请添加整个消息。是的,这是一个默认名称。
  • SQL> alter table mn drop foreign key mn_ibfk_1; alter table mn drop foreign key mn_ibfk_1 * ERROR at line 1: ORA-00905: missing keyword

标签: sql oracle foreign-keys constraints


【解决方案1】:

由于您没有指定约束名称,Oracle 为您生成了一个(类似于SYS_034849548)。

您需要找到约束名称才能删除它:

select constraint_name
from user_constraints
where table_name = 'ABC'
  and constraint_type = 'R'

将显示约束名称。然后您可以使用以下方法删除约束:

alter table abc drop constraint <constraint_name>;

(将 &lt;constraint_name&gt; 替换为您使用 SQL 语句检索到的名称)

注意语法是alter table ... <b><i>drop constraint</i></b>。没有drop foreign key

【讨论】:

  • 顺便说一句,约束的名称正是你说的我通过进入oracle本地服务器主页检查它的方式。
  • 如果它显示“no rows select”,您要么没有为该表创建外键,要么您提供了错误的表名。表名在 oracle 系统视图中以大写形式存储。您还需要以大写形式提供您的表名。
【解决方案2】:

试试这个

alter table mn drop constraint mn_ibfk_1;

要确定约束的名称,请尝试此查询

SELECT a.table_name child_table,
        b.table_name parent_table,
        a.constraint_name child_constraint,
        b.constraint_name parent_constraint,
        c.column_name child_column,
        d.column_name parent_column
  FROM user_constraints a,
        user_constraints b,
        user_cons_columns c,
        user_cons_columns d
 WHERE        a.constraint_type = 'R'
        AND b.constraint_type = 'P'
        AND b.constraint_name = a.r_constraint_name
        AND A.table_name = c.table_name
        AND b.table_name = d.table_name
        AND a.constraint_name = c.constraint_name
        AND b.constraint_name = d.constraint_name
        AND c.position = d.position
        AND a.table_name = 'mn' ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2018-11-28
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多