删除外键约束

时间:2014-09-08 07:08:00

标签: sql oracle foreign-keys constraints

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

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

甚至

 alter table abc drop foreign key mn_ibfk_1;

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

2 个答案:

答案 0 :(得分:0)

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

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

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

将显示约束名称。然后,您可以使用以下命令删除约束:

alter table abc drop constraint <constraint_name>;

(将<constraint_name>替换为您使用SQL语句检索的名称)

请注意,语法为alter table ... drop constraint。没有drop foreign key

答案 1 :(得分:0)

试试这个

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' ;