如何找到外键引用的表?

20 浏览
0 Comments

如何找到外键引用的表?

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

有一个表,其中有一个名为language_id的列,它是另一个表的外键。我想知道该外键引用哪个表。可惜,我不想通过肉眼查看所有表来找到答案,因为大约有120个表,而且它们的名称不具有描述性。

有办法可以找到吗?

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

0
0 Comments

如何找到外键引用的表?原因是需要查找外键引用的表,以便了解数据表之间的关系。解决方法是使用查询数据字典的方法,可以通过以下SQL语句来实现:

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工具中,你还可以打开表查看器(从连接的扩展表列表中,在左侧面板中),初始视图显示表的列,但如果你点击约束选项卡,它将显示相同的信息 - 以及有关约束的更多信息。不过,这种方法一次只能显示一个表。

0
0 Comments

在使用Oracle数据库时,我使用了上面的查询语句。这个查询语句的作用是找出外键引用的目标表。然而,在使用过程中我遇到了一些问题,需要解决。

问题的原因是我无法确定一个外键引用的是哪个表。在数据库中,外键是用来建立表与表之间关联的约束。一个表的外键引用了另一个表的主键,用来确保数据的完整性和一致性。然而,当我需要知道一个外键引用的是哪个表时,却无法直接得到这个信息。

为了解决这个问题,我查阅了Oracle的官方文档,并找到了一种解决方法。我使用了上面提到的查询语句,通过连接多个表,使用约束的相关信息来确定外键引用的目标表。

在查询语句中,我使用了多个表和条件。首先,我连接了all_cons_columns表和all_constraints表,使用约束的所有者和约束名称进行连接。然后,我再次连接了all_constraints表和all_cons_columns表,使用远程约束的所有者和约束名称进行连接,并且通过a.position = b.position来确保连接的是同一个外键。最后,我使用a.owner和b.TABLE_NAME来限定查询的范围,以及lc.constraint_type = 'R'来筛选出外键约束。

通过这个查询语句,我成功地找到了外键引用的目标表。结果中包含了子表的表名、子表的列名、父表的表名、父表的列名、外键的位置、子表的约束名和父表的约束名。这些信息帮助我确定了外键引用的目标表。

总结起来,我在使用Oracle数据库时遇到了无法确定外键引用的目标表的问题。为了解决这个问题,我使用了上面提到的查询语句,通过连接多个表和使用约束的相关信息来确定外键引用的目标表。这个方法帮助我找到了我需要的信息,解决了我的问题。

0
0 Comments

如何找到外键所引用的表?

如果您正在使用SQL Developer,只需打开表,转到约束页面,找到您的外键,并查看R_TABLE_NAME列。

解决方法:

1. 打开SQL Developer。

2. 打开所需的数据库连接。

3. 导航到表列表,并找到包含外键的表。

4. 右键单击该表,并选择“打开”。

5. 在表的详细信息页面中,选择“约束”选项卡。

6. 在约束列表中,找到您感兴趣的外键。

7. 查看“R_TABLE_NAME”列,以确定该外键引用的表。

这样,您就可以找到外键所引用的表。

0