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

Posted

技术标签:

【中文标题】错误 ORA-02270: 此列列表没有匹配的唯一键或主键【英文标题】:error ORA-02270: no matching unique or primary key for this column-list 【发布时间】:2014-10-17 17:03:58 【问题描述】:

我正在练习一项实验室手动练习,我必须在其中创建 6 个表。 5的创造是 成功。

但是一行报错

constraint GRADE_Designation_FK 
   FOREIGN KEY(Designation) References EMPLOYEE(Designation),

第 7 行出现错误:

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

2 个链接表的查询是

create table EMPLOYEE
(
    Empno number(4) constraint EMPLOYEE_Empno_PK PRIMARY KEY,
    Name varchar2(10) not null,
    Designation varchar2(50),
    Qualification varchar2(10),
    Joindate date
);

create table GRADE
(
    Designation varchar2(50) constraint GRADE_Designation_PK PRIMARY KEY,
    Grade number(2),
    TotalPosts number(4),
    PostsAvailable number(4),

    constraint GRADE_Grade_CK  check(Grade between 1 and 20),
    constraint GRADE_PostsAvailable_CK check(PostsAvailable <= TotalPosts),
    constraint GRADE_Designation_FK FOREIGN KEY(Designation) References EMPLOYEE(Designation)
);

试过

create table GRADE
(
    Designation varchar2(50) constraint GRADE_Designation_PK PRIMARY KEY,
    Grade number(2),
    TotalPosts number(4),
    PostsAvailable number(4),

    constraint GRADE_Grade_CK  check(Grade between 1 and 20),
    constraint GRADE_PostsAvailable_CK check(PostsAvailable <= TotalPosts)
);

create table EMPLOYEE
(
    Empno number(4) constraint EMPLOYEE_Empno_PK PRIMARY KEY,
    Name varchar2(10) not null,
    Designation varchar2(50) NOT NULL UNIQUE,
    Qualification varchar2(10),
    Joindate date default sysdate

    constraint EMPLOYEE_Designation_FK FOREIGN KEY(Designation) References GRADE(Designation),
);

现在出现新错误

约束 EMPLOYEE_Designation_FK FOREIGN KEY(Designation) 参考 GRADE(Designation) *

第 8 行出现错误:

ORA-02253:此处不允许约束规范

【问题讨论】:

“Joindate date default sysdate”后面需要一个逗号。 【参考方案1】:

你在错误的表上得到了约束。您应该在 EMPLOYEE.DESIGNATION 上创建一个外键,引用 GRADE.DESIGNATION。

所以你的表格应该是这样的:

create table GRADE
(
Designation varchar2(50) constraint GRADE_Designation_PK PRIMARY KEY,
Grade number(2),
TotalPosts number(4),
PostsAvailable number(4),
constraint GRADE_Grade_CK  check(Grade between 1 and 20),
constraint GRADE_PostsAvailable_CK check(PostsAvailable <= TotalPosts),
);

create table EMPLOYEE
(
Empno number(4) constraint EMPLOYEE_Empno_PK PRIMARY KEY,
Name varchar2(10) not null,
Designation varchar2(50)
  constraint EMPLOYEE_FK1
    REFERENCES GRADE(DESIGNATION),
Qualification varchar2(10),
Joindate date
);

分享和享受。

【讨论】:

DESIGNATION 是成绩表中的主键。并尝试了唯一约束,仍然无法正常工作 我编辑了我的答案以显示应该如何完成。外键约束应该在 EMPLOYEE 上,引用 GRADE - 你反过来说。祝你好运。 编辑了我的问题...也尝试了你的方法。新错误【参考方案2】:

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

该错误非常不言自明,可以告诉您出了什么问题。在您的情况下,您正在尝试在非主键列上创建外键,因此错误

constraint GRADE_Designation_FK FOREIGN KEY(Designation) 
               References EMPLOYEE(Designation)
                                  <--Here

EMPLOYEE 表中的Designation 不是主键,您不能在非主键列上创建 FK。您的表创建应该看起来像

create table GRADE
(
Designation varchar2(50) constraint GRADE_Designation_PK PRIMARY KEY,
employee_Empno number(4),
Grade number(2),
TotalPosts number(4),
PostsAvailable number(4),
constraint GRADE_Grade_CK  check(Grade between 1 and 20),
constraint GRADE_PostsAvailable_CK check(PostsAvailable <= TotalPosts),
constraint GRADE_Designation_FK FOREIGN KEY(employee_Empno) 
References EMPLOYEE(Empno));

【讨论】:

我必须提交手册,我无法自行添加列。需要使用有问题提供的列。 我看到您的编辑有问题。那应该可以正常工作。您遇到了新的错误原因,您在employee 表的最后一行之前缺少,【参考方案3】:

这是导致我们这个问题的执行顺序,请确保在添加这些约束之前创建了启用 NOT NULL 的表以避免此错误。

【讨论】:

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

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

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

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

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

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

更改表 - 错误 ORA-02270