有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表的外键约束时,报:此列列表的唯一关键字或主键不匹配 这个错
请大家帮忙

解决方案 »

  1.   

    tab_col1在A表中必有唯一才行的
      

  2.   

    可以这样实现你的要求:
    新增一个字段ID为主键代替你原来的联合主键,tab_col1,tab_col2这两个字段上使用唯一约束,B表references ID即可.
      

  3.   

    意思即是tab_col1在A表中必须是有唯一约束或是主键才行,主外键关系是主表和从(子)表关系.
      

  4.   

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

  5.   

    麻烦大家了,原题是这样的
    Hotel (hotelNo, hotelName, city)
    Room (roomNo, hotelNo, type, price)
    Booking (hotelNo, guestNo, dateFrom, dateTo,roomNo)
    Guest (guestNo,guestName,guestAddress)红的都是主键,booking内的roomNo肯定是引用Room表的roomNo的外键呀那Room表中,不得把前2个字段都设置成联合主键吗?
    这样的话,那怎样设置booking表中roomNo这个外键呢?
      

  6.   

    我现在把booking中的外键改成hotelNo和roomNo了,引用room表中的那roomNo和hotelNo的外键。
    那这样就可以了。根据上边的题目,我这样做对吗?
      

  7.   

    我没看你的这个逻辑需求是否正确合理,仅回答你在一个表的主键包含两列,然后第二个表外键其中一个列的问题:
    OPER@tl>create table test(aaa number,bbb number,primary key(aaa,bbb));表已创建。OPER@tl>create table test2(aaa number references test(aaa));
    create table test2(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>
      

  8.   

    up
    真的每遇到过这种情况哦。
    一般都是Booking含有 roomNo, hotelNo
      

  9.   

    Room (hotelNo)的fk是Hotel (hotelNo) Booking (guestNo) fk是Guest (guestNo) Booking (hotelNo) fk是Hotel (hotelNo)但
    Booking (roomNo)的fk不是Room (roomNo) 
    因为它会重复