首页  编辑  

如何查询出primary key和forgen key的关系表?

Tags: /超级猛料/Database.数据库相关/Oracle/DBA/   Date Created:

阿木伯 著

如何查询出primary key和forgen key的关系表?

说明:

SQL> create user a identified by a;        --创建测试用户a

SQL> grant connect,resource to a;        --给用户a授权

SQL> conn a/a                        --以用户a连接

SQL> create table a1(a11 number primary key);

SQL> insert into a1 values(1);

SQL> insert into a1 values(2);

SQL> insert into a1 values(3);

SQL> commit;

SQL> create table b1

 2  (

 3  b11 char(1),

 4  b12 number,

 5  foreign key(b12) references a1(a11)

 6  )

 7  /

SQL> insert into b1 values('a',4);

insert into b1 values('a',4)

*

ERROR 位于第 1 行:

ORA-02291: 违反完整约束条件 (A.SYS_C001241) - 未找到父项关键字

注:a1表中a11列上只有1、2、3这三个值,而b1表中的列b12定义时引用了a1表中的a11列,

那么,在向b1表中录入记录时,b12列只能录1、2、3,而不能输入4。

SQL> create table a2(a21 number primary key);

SQL> insert into a2 values(1);

SQL> insert into a2 values(2);

SQL> insert into a2 values(3);

SQL> commit;

SQL> create table b2

 2  (

 3  b21 char(1),

 4  b22 number,

 5  foreign key(b22) references a2(a21)

 6  )

 7  /

注:以下语句查询primary key和forgen key的关系表

SQL> col 外键拥有者 format a10

SQL> col 外键表 format a10

SQL> col 主键拥有者 format a10

SQL> col 主键表 format a10

SQL> col 外键列 format a15

SQL> col 主键列 format a15

select

a.owner 外键拥有者,

a.table_name 外键表,

c.column_name 外键列,

b.owner 主键拥有者,

b.table_name 主键表,

d.column_name 主键列

from

user_constraints a,

user_constraints b,

user_cons_columns c,

user_cons_columns d

where

   a.r_constraint_name=b.constraint_name

and a.constraint_type='R'

and b.constraint_type='P'

and a.r_owner=b.owner

and a.constraint_name=c.constraint_name

and b.constraint_name=d.constraint_name

and a.owner=c.owner

and a.table_name=c.table_name

and b.owner=d.owner

and b.table_name=d.table_name

/

外键拥有者 外键表     外键列          主键拥有者 主键表     主键列

---------- ---------- --------------- ---------- ---------- ------

A          B1         B12             A          A1         A11

A          B2         B22             A          A2         A21

【最后更新: 06/03/2002 09:38:56 】