oracle主键跟踪,Oracle根据主键查找外键

需求:

假如以前创建了两个有外键关联的表A和B:

create table A(id number(3) primary key,

name varchar2(10));

create table B(id number(3), sex

varchar2(1));

alter table B add constraint fk_id foreign

key(id) references A(id);

过了一段时间后忘了当初把哪个表的哪个字段设成A表id字段的外键,要求查出该外键所对应的列名和表名。

解决方案:

(1)首先查询A表的主键名称:

select constraint_name from user_constraints where table_name='A' and constraint_type ='P';

4b78f2f28b3af887afcecd207b612596.png

因为建主键名时没有指定具体的名称,所以这里得到的系统给A表分配的主键名称为SYS_C0023469

(2)接着在上一步的基础上查找外键对应的表名和列名:

select

table_name,constraint_name,constraint_type from user_constraints where r_constraint_name =

(select constraint_name from user_constraints where table_name='A' and constraint_type ='P');

bc90a2d47c94efb176d24930237cdbc2.png

这里用到了r_constraint_name。假如表B中的某个外键为表A的主键,则有B.r_constraint_name=A.constraint_name。

(3)知道了表名和外键约束名后,就很容易从user_cons_columns中查找列名:

select column_name from user_cons_columns where table_name='B';

select column_name from user_cons_columns where constraint_name='FK_ID';

0a5d7de188ea49830ec86fd710395161.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值