首先来普及几个知识:
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.youkuaiyun.com/u/20080924/14/fc0fff97-4016-4421-8449-fac6b1515aad.html
http://www.cnblogs.com/chinhr/archive/2009/03/16/1413308.html
转载于:https://blog.51cto.com/302838282/1020866