当前位置: 首页 > 面试题库 >

“为此列列表匹配唯一或主键”。主键确实存在

屠和洽
2023-03-14
问题内容

因此,我正在为测试练习一些sql编码,但是我无法获得外键来引用主键。

这是无效的表格:

CREATE TABLE ASSIGNMENT(
ASSIGN_ID NUMBER(2) NOT NULL,
START_DATE DATE,
END_DATE DATE,
BUDGET NUMBER (10,2),
MANAGER_ID NUMBER(2),
  PRIMARY KEY (ASSIGN_ID,MANAGER_ID),
  FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEE(EMP_ID)
);

这是它引用的表:

CREATE TABLE EMPLOYEE(
EMP_ID NUMBER(2) NOT NULL,
NAME VARCHAR(40),
OFFICE VARCHAR(20),
EXPERT_ID NUMBER(2),
  PRIMARY KEY (EMP_ID,EXPERT_ID),
  FOREIGN KEY (EXPERT_ID) REFERENCES EXPERTISE(EXPERT_ID)
);

每当我尝试运行脚本时,它总会返回:

错误报告
-SQL错误:ORA-02270:此列列表
02270没有匹配的唯一或主键。00000-“此列列表没有匹配的唯一或主键”
原因:CREATE / ALTER TABLE中的REFERENCES子句语句
给出了一个列列表,该列列表在被引用的表中没有匹配的唯一键或主键约束。
操作:使用ALL_CONS_COLUMNS目录视图查找正确的列名称

我环顾四周,但似乎找不到问题。任何帮助,将不胜感激。

这是完整的代码(尚未测试最后一张表):

CREATE TABLE EXPERTISE(
EXPERT_ID NUMBER(2) NOT NULL,
DESCRIPTION VARCHAR(50),
HOURLY_RATE NUMBER(3,2),
CHARGE_RATE NUMBER(3,2),
  PRIMARY KEY(EXPERT_ID)
);

CREATE TABLE EMPLOYEE(
EMP_ID NUMBER(2) NOT NULL,
NAME VARCHAR(40),
OFFICE VARCHAR(20),
EXPERT_ID NUMBER(2),
  PRIMARY KEY (EMP_ID,EXPERT_ID),
  FOREIGN KEY (EXPERT_ID) REFERENCES EXPERTISE(EXPERT_ID)
);

CREATE TABLE ASSIGNMENT(
ASSIGN_ID NUMBER(2) NOT NULL,
START_DATE DATE,
END_DATE DATE,
BUDGET NUMBER (10,2),
MANAGER_ID NUMBER(2),
  PRIMARY KEY (ASSIGN_ID,MANAGER_ID),
  FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEE(EMP_ID)
);


CREATE TABLE ALLOCATION(
EMP_ID NUMBER(3) NOT NULL,
ASSIGN_ID NUMBER(3) NOT NULL,
DAYS_WORKED_ON DATE,
HOURS_WORKED_ON DATE,
  PRIMARY KEY(EMP_ID,ASSIGN_ID),
  FOREIGN KEY(EMP_ID) REFERENCES EMPLOYEE(EMP_ID),
  FOREIGN KEY(ASSIGN_ID) REFERENCES ASSIGNMENT(ASSIGN_ID)
);

我正在使用Oracle SQL Developer来做到这一点


问题答案:

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

问题在于EMP_ID(本身)不是表的主键或唯一键Employees,而是具有复合主键(EMP_ID, EXPERT_ID)

要解决该问题,可以使表格EMP_ID的主键Employees(这看起来很直观,因为每个员工都应该有一个唯一的ID),或者在上添加一个单独的唯一约束EMP_ID

正如注释中指出的那样,如果您创建EMP_ID主键,那么 (EMP_ID, EXPERT_ID)扩展名也将是唯一的。



 类似资料:
  • 本文向大家介绍主键与唯一键,包括了主键与唯一键的使用技巧和注意事项,需要的朋友参考一下 首要的关键 主键是一列,用于唯一地标识表的每个元组。 它用于向表添加完整性约束。一个表中只能使用一个主键。在主键的情况下,重复和NULL(空)值无效。主键也可以用作其他表的外键。 让我们举个例子 我们有一个表名employee,用于存储公司员工的数据。下表显示了该表的内容。 Emp_id 名称 号码 位置 薪水

  • 这是图式 我会尝试调用命令: 这给了我一个错误:没有唯一或排除约束匹配ON CONFLICT规范 如果我仅将post_id作为约束或仅将链接作为约束(即关于冲突(post_id)或关于冲突(link))而不是两者都包括,则查询可以工作。我想不出这是什么原因。有人知道为什么吗?

  • 所以我有一个表,它用一个昵称作为外键,用一个id作为主键: 到目前为止,一切都很好。然而,每当我试图从发布中获取主键时,它告诉我:“没有唯一的约束来匹配引用表“信息”的给定键。 但是,如果我将表中的信息信息ID更改为唯一,错误就会消失。这是正确的做事方式吗? 提前感谢大家!

  • 每当应用程序启动时,我总是收到以下错误消息: 将data.sql更改为: 产生以下错误消息:

  • 每当我的应用程序启动时,我总是得到以下错误消息: 将data.sql更改为: 生成以下错误消息:

  • 在本方案中: Hibernate按预期创建了两个表: Envers还创建两个表: 创建表(bigint(20)不为空,int(11)不为空,tinyint(4)默认为空,主键(,),键(),约束 而且 创建表(int(11)不为NULL,bigint(20)不为NULL,varchar(255)不为NULL,tinyint(4)默认为NULL,主键(,,),约束 问题出在第二个审核表(testen