因此,我正在为测试练习一些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