【问题标题】:How can I find out which table a foreign key references?如何找出外键引用的表?
【发布时间】:2016-05-06 11:27:05
【问题描述】:

我有一个没有文档的数据库。

有一个表有一个列language_id,它是另一个表的外键。我想知道外键引用哪个表。我不想仅仅通过肉眼看到所有表格就知道了,因为大约有 120 个表格,不幸的是,这些名称没有描述性。

有没有办法找到它?

我正在使用 SQL Developer 查询远程 Oracle 11g 数据库。

【问题讨论】:

标签: oracle oracle11g constraints referential-integrity


【解决方案1】:

你说你正在使用 SQL Developer。

所以,只要打开表。

转到约束页面。

找到你的外键。

查看 R_TABLE_NAME 列。

【讨论】:

    【解决方案2】:

    您可以查询数据字典,例如:

    select uc_r.table_name, ucc_r.column_name, uc_r.constraint_name,
      uc_p.constraint_name, uc_p.table_name, ucc_p.column_name
    from user_constraints uc_r
    join user_cons_columns ucc_r on ucc_r.constraint_name = uc_r.constraint_name
    join user_constraints uc_p on uc_p.constraint_name = uc_r.r_constraint_name
    join user_cons_columns ucc_p on ucc_p.constraint_name = uc_p.constraint_name
    and ucc_p.position = ucc_r.position
    where uc_r.constraint_type = 'R';
    

    查找所有外键约束(类型 R),找到匹配的主键/唯一键,并匹配两个表中的列。当然,您可以将其限制为特定的表、列或约束,但如果您尝试查找所有映射,则更广泛的视图可能会很有用。

    如果我创建一个虚拟的父/子关系,使用未命名的约束(这可能是您所说的名称不具有描述性的意思):

    create table language (id number primary key, name varchar2(10));
    create table my_table (language_id references language(id));
    

    然后该查询找到:

    TABLE_NAME   COLUMN_NAME    CONSTRAINT_NAME  CONSTRAINT_NAME  TABLE_NAME   COLUMN_NAME   
    -----------  -------------  ---------------  ---------------  -----------  ------------- 
    MY_TABLE     LANGUAGE_ID    SYS_C00111327    SYS_C00111326    LANGUAGE     ID             
    

    您还可以从 SQL Developer 打开表查看器(从您的连接下的展开表列表,在左侧面板中);初始视图显示表格列,但如果您单击“约束”选项卡,它将向您显示相同的信息 - 以及更多关于约束的信息。不过,这一次只会显示一个表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 2010-10-02
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 2016-11-06
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多