我怎样才能找出哪个 table 外键引用?
How can I find out which table a foreign key references?
我有一个没有文档的数据库。
有一个 table,它有一个列 language_id
,它是另一个 table 的外键。我想知道外键引用了哪个 table 。我不想仅仅通过观察所有 table 来找出答案,因为大约有 120 个 table,不幸的是,这些名称没有描述性。
有办法找到吗?
我正在使用 SQL Developer 来查询远程 Oracle 11g 数据库。
你可以查询数据字典,像这样:
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),找到匹配的 primary/unique 键,并匹配来自两个 table 的列。当然,您可以将其限制为特定的 table、列或约束,但如果您试图找到所有映射,则更广泛的视图可能会有用。
如果我创建一个虚拟 parent/child 关系,使用未命名的约束(这可能是您所说的名称没有描述性的意思):
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 中,您还可以打开 table 查看器(从您连接下的扩展 table 列表中,在左侧面板中);初始视图显示 table 列,但如果您单击“约束”选项卡,它会显示相同的信息 - 以及更多关于约束的信息。不过,这一次只会显示一个 table。
您说您正在使用 SQL 开发人员。
所以,只需打开 table。
转到限制页面。
找到你的外键。
查看 R_TABLE_NAME 列。
我有一个没有文档的数据库。
有一个 table,它有一个列 language_id
,它是另一个 table 的外键。我想知道外键引用了哪个 table 。我不想仅仅通过观察所有 table 来找出答案,因为大约有 120 个 table,不幸的是,这些名称没有描述性。
有办法找到吗?
我正在使用 SQL Developer 来查询远程 Oracle 11g 数据库。
你可以查询数据字典,像这样:
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),找到匹配的 primary/unique 键,并匹配来自两个 table 的列。当然,您可以将其限制为特定的 table、列或约束,但如果您试图找到所有映射,则更广泛的视图可能会有用。
如果我创建一个虚拟 parent/child 关系,使用未命名的约束(这可能是您所说的名称没有描述性的意思):
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 中,您还可以打开 table 查看器(从您连接下的扩展 table 列表中,在左侧面板中);初始视图显示 table 列,但如果您单击“约束”选项卡,它会显示相同的信息 - 以及更多关于约束的信息。不过,这一次只会显示一个 table。
您说您正在使用 SQL 开发人员。
所以,只需打开 table。
转到限制页面。
找到你的外键。
查看 R_TABLE_NAME 列。