【问题标题】:Table with foreign key won't compile (no matching unique or primary key for this column-list)具有外键的表无法编译(此列列表没有匹配的唯一键或主键)
【发布时间】:2019-07-02 04:47:56
【问题描述】:

我创建了两个表,其中包含一些列和所有这些东西。我收到错误“此列列表没有匹配的唯一键或主键”,但我不知道我错过了什么......

这是一个基本的主键和外键表,它不会编译。我上网查了好几个小时,一无所获。

create table TP2_ITEM_FAVORI (
    NOM_UTILISATEUR varchar2(30) not null,
    NO_ITEM number(6) not null,
    constraint PK_ITEM_FAV primary key(NOM_UTILISATEUR, NO_ITEM));

create table TP2_UTILISATEUR (
    NOM_UTILISATEUR varchar2(30) not null,
    NO_ENCAN number(6) not null,
    MOT_DE_PASSE_UTI varchar(30) not null,
    NOM_UTI varchar2(20) not null,
    PRENOM_UTI varchar2(20) not null,
    TEL_UTI char(13) not null,
    COURRIEL_UTI varchar2(25) not null,
    TYPE_UTI varchar(20) not null,
    NOM_UTILISATEUR_PARENT varchar2(30) not null,
    constraint PK_UTILISATEUR primary key(NOM_UTILISATEUR),
    constraint AK_NOM_PRENOM_TEL_UTI unique(NOM_UTI, PRENOM_UTI, TEL_UTI),
    constraint AK_COURR_UTI unique(COURRIEL_UTI),
    constraint FK_NOM_UTILISATEUR_UTI foreign key(NOM_UTILISATEUR) references
    TP2_ITEM_FAVORI(NOM_UTILISATEUR));

【问题讨论】:

  • 您需要在创建的两个表之间使用GO 语句,以便在您尝试在第二个表中引用它时第一个表存在。
  • 请用您实际使用的数据库标记您的问题,我怀疑它的 Oracle SQL 不是 MS SQL Server
  • 是的,是Oracle SQL

标签: sql oracle ddl


【解决方案1】:

外键需要是另一个表的主键或唯一列:https://www.techonthenet.com/oracle/errors/ora02270.php

TP2_UTILISATEUR 中,您引用TP2_ITEM_FAVORI(NOM_UTILISATEUR) 作为外键,但NOM_UTILISATEUR 不是TP2_ITEM_FAVORI 的主键。 TP2_ITEM_FAVORI的主键是(NOM_UTILISATEUR, NO_ITEM)

解决方法是将TP2_ITEM_FAVORI的主键改为NOM_UTILISATEUR,而不是两列。

【讨论】:

  • 我明白,但是如果我不改变TP2_ITEM_FAVORI的主键,那么我就不能做一个外键约束。那么,我怎样才能为两个表保留相同的数据呢?
  • 它们是不同的表。 “保留相同的数据”是什么意思?改变主键不会改变数据,对吧?
  • 我发现我的错误,我在错误的表中做了外键约束-.-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2023-04-03
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多