oracle 建立外键 此列列表的唯一关键字或主键不匹配 解决办法

 

首先来普及几个知识:

1.外键所对应的字段必须是主键

2.建立外键对应表的多列主键必须都为对应字段,如果本表没有,就设对应表的相应字段为唯一约束(unique)

 

举几个列子:

(第一个

有2个表,A和B
A我创建主键约束是这样的
CONSTRAINT tab_t_pk PRIMARY KEY (tab_col1,tab_col2)


B表我建立外键约束的是
CONSTRAINT tab_t_fk FOREIGN KEY (tab_col1) REFERENCES A(tab_col1)
创建b表的外键约束时,报:此列列表的唯一关键字或主键不匹配这个错  

 

KEY:

你的逻辑有问题,a中是联合主键,b中的外键却只关联a中的一个字段,导致不唯一,当然错了

 

 

 

(第二个)

有2个表,A和B
A我创建主键约束是这样的
CONSTRAINT tab_t_pk PRIMARY KEY (tab_col1,tab_col2)

B表我建立外键约束的是
CONSTRAINT tab_t_fk FOREIGN KEY (tab_col1) REFERENCES A(tab_col1)

创建b表的外键约束时,报:此列列表的唯一关键字或主键不匹配 这个错
 

我没看你的这个逻辑需求是否正确合理,仅回答你在一个表的主键包含两列,

然后第二个表外键其中一个列的问题:

OPER@tl>create table test(aaa number,bbb number,primary key(aaa,bbb));

表已创建。

OPER
@tl>create table test2(aaa number references test(aaa));

number references test(aaa))
                                             
*
1 行出现错误:
ORA
-02270: 此列列表的唯一关键字或主键不匹配


OPER
@tl>alter table test add constraint xx unique(aaa);

表已更改。

OPER
@tl>create table test2(aaa number references test(aaa));

表已创建。

OPER
@tl>


以上就是必须要建立唯一索引的列子

 

参考网页:http://topic.csdn.net/u/20080924/14/fc0fff97-4016-4421-8449-fac6b1515aad.html

         

          http://www.cnblogs.com/chinhr/archive/2009/03/16/1413308.html

 

 

 

你可能感兴趣的:(oracle,主键,唯一,约束)