Oracle (ORA-02270):该列列表没有匹配的唯一键或主键

Posted

技术标签:

【中文标题】Oracle (ORA-02270):该列列表没有匹配的唯一键或主键【英文标题】:Oracle (ORA-02270) : no matching unique or primary key for that column list 【发布时间】:2021-11-28 22:20:11 【问题描述】:

我有两张桌子:

CREATE TABLE Trasy_srodki_transportu(
  ID_Trasy Integer NOT NULL,
  ID_pojazdu Integer NOT NULL
) 
/
CREATE TABLE Trasy(
  ID_Trasy Integer NOT NULL,
  Linia Varchar2(4 ) NOT NULL,
  Data_rozpoczecia_kursowania Date NOT NULL,
  Data_zakonczenia_kursowania Date,
  ID_Pracownika Integer NOT NULL
)

现在我想将外键添加到 Trasy_srodki_transportu 引用 Trasy 表:

ALTER TABLE Trasy_srodki_transportu ADD CONSTRAINT Trasa_jest_wykorzystywana FOREIGN KEY (ID_Trasy) REFERENCES Trasy (ID_Trasy)
/

这会引发 Oracle (ORA-02270) : no matching unique key or primary key for this column-list 错误。有什么建议可以解决这个问题吗?Data modeler view

【问题讨论】:

外键强制所有值都存在于引用的表中。你检查过这一点吗? any of the existing questions discussing this same error 对你有帮助吗? 【参考方案1】:

外键需要引用相关表上的键,但在您的示例中并非如此。通过在其中添加PRIMARY KEY 约束来更改第二个表的定义,如下所示:

CREATE TABLE Trasy (
  ID_Trasy Integer PRIMARY KEY NOT NULL,
  Linia Varchar2(4 ) NOT NULL,
  Data_rozpoczecia_kursowania Date NOT NULL,
  Data_zakonczenia_kursowania Date,
  ID_Pracownika Integer NOT NULL
)

或者,您可以在其上创建一个唯一约束,该约束也可以用作键。例如:

CREATE TABLE Trasy (
  ID_Trasy Integer NOT NULL,
  Linia Varchar2(4 ) NOT NULL,
  Data_rozpoczecia_kursowania Date NOT NULL,
  Data_zakonczenia_kursowania Date,
  ID_Pracownika Integer NOT NULL,
  CONSTRAINT uq_idtrasy UNIQUE (ID_Trasy)
)

【讨论】:

以上是关于Oracle (ORA-02270):该列列表没有匹配的唯一键或主键的主要内容,如果未能解决你的问题,请参考以下文章

SQL : ORA-02270: 此列列表没有匹配的唯一键或主键

错误 ORA-02270: 此列列表没有匹配的唯一键或主键

如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误

添加外键约束时遇到问题(错误 ORA-02270:此列列表没有匹配的唯一键或主键)

更改表 - 错误 ORA-02270

ORA-02270: 此列列表的唯一关键字或主键不匹配一些思路