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

Posted

技术标签:

【中文标题】SQL : ORA-02270: 此列列表没有匹配的唯一键或主键【英文标题】:SQL : ORA-02270: no matching unique or primary key for this column-list 【发布时间】:2021-11-16 09:14:24 【问题描述】:
CREATE TABLE Store
(
    Store_Name VARCHAR2(20) PRIMARY KEY NOT NULL,
    Year_Opened DATE,
    Manager VARCHAR2(20) NOT NULL
);
    
CREATE TABLE Store1
(
    Store VARCHAR2(20) NOT NULL
        REFERENCES Store(Store_Name),
    Department VARCHAR2(10) NOT NULL,
    PRIMARY KEY ( Store, Department )
);
    
CREATE TABLE Inventory
(
    Inventory_No VARCHAR2(8) PRIMARY KEY NOT NULL,
    Store VARCHAR2(20) NOT NULL
        REFERENCES Store1(Store),
    Department VARCHAR2(10) NOT NULL
        REFERENCES Store1(Department)
);

只是想知道为什么我一遍又一遍地收到同样的错误。我引用了正确的表,而我引用的列是主键,所以我不确定为什么会出现错误。任何帮助将不胜感激谢谢。

完全错误:

ORA-02270: 此列列表没有匹配的唯一键或主键 02270. 00000 - “此列列表没有匹配的唯一键或主键”

*原因:CREATE/ALTER TABLE 语句中的 REFERENCES 子句给出了一个列列表,在被引用的表中没有匹配的唯一键或主键约束。

*操作:使用 ALL_CONS_COLUMNS 目录视图查找正确的列名

【问题讨论】:

【参考方案1】:

我引用了正确的表,而我引用的列是主键

不是真的。

从表inventory,您引用Store1 (Store),但store1 表的主键定义为PRIMARY KEY ( Store, Department )

你不能引用主键的部分

如果您按如下方式修改外键约束,它将起作用:

SQL> CREATE TABLE Store(
  2      Store_Name VARCHAR2(20) PRIMARY KEY NOT NULL,
  3      Year_Opened DATE,
  4      Manager VARCHAR2(20) NOT NULL
  5  );

Table created.

SQL> CREATE TABLE Store1(
  2      Store VARCHAR2(20) NOT NULL
  3          REFERENCES Store(Store_Name),
  4      Department VARCHAR2(10) NOT NULL,
  5      PRIMARY KEY ( Store, Department )
  6      );

Table created.

SQL>  CREATE TABLE Inventory(
  2      Inventory_No VARCHAR2(8) PRIMARY KEY NOT NULL,
  3      Store VARCHAR2(20) NOT NULL,
  4      Department VARCHAR2(10) NOT NULL,
  5      --
  6      constraint fk_inv_sto foreign key (store, department)
  7        references store1 (store, department)
  8  );

Table created.

SQL>

【讨论】:

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

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

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

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

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

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

更改表 - 错误 ORA-02270