当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL/PGAdmin4错误:没有唯一的约束匹配引用表的给定键

卫阳曜
2023-03-14

PostgreSQL/PGAdmin4错误:没有唯一的约束匹配引用表的给定键

这是我试图编码到PGAdmin4/Postgresql:http://i.imgur.com/xPEu8Sh.jpg的模式

我能够转换所有表格,除了“资格证书”。

我尝试处理以下查询:

create table REGISTRATION(
    StudentID int,
    SectionNo int,
    Semester varchar(16),
    foreign key(StudentID) references Student(StudentID),
    foreign key (SectionNo, Semester) references Section(SectionNo, Semester),
    primary key(studentID, SectionNo, Semester)
    );

我收到以下消息:错误:没有唯一的约束匹配引用表“section”的给定键

这些是我在表格部分中介绍的外国和主要内容

普凯:我,伊姆格。com/BcUNKug。jpg

FKEY:i.imgur。com/D8B8hRW。jpg

版块表的代码:

CREATE TABLE class_scheduling_01.section
(
sectionno integer NOT NULL,
semester character varying(16) COLLATE pg_catalog."default" NOT NULL,
courseid character varying(16) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT section_pkey PRIMARY KEY (sectionno, semester, courseid),
CONSTRAINT section_sectionno_key UNIQUE (sectionno),
CONSTRAINT section_courseid_fkey FOREIGN KEY (courseid)
    REFERENCES class_scheduling_01.course (courseid) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
)

我还运行了命令:ALTER TABLE section ADD UNIQUE(sectionno);

因为没有一个属性似乎在重复。

尽管如此,我还是得到了:错误:对于在642毫秒内成功返回的引用表“section”查询,没有唯一的约束匹配给定的键。

编辑:我回到了COURSE表,并将CourseID设为唯一约束。我仍然得到相同的消息。SECTION表有一个由3列组成的复合主键。如链接的第一张图片所示,在所有值中,只有SECTION. sectionno是唯一具有唯一/不重复值的列。

第二次编辑:我决定一步一步地创建表“注册”,并使用更改表命令使外键持续。

我能够使专栏StudentID和D Section没有外键指向各自的专栏。当我想注册的时候。第二学期:一节的外键。我又收到了错误信息。更改表注册添加外键(学期)参考部分(学期);

正如在我链接的图像中看到的,Semester值是重复的;尽管如此,我仍然需要使它唯一吗?或者我是否创建一个唯一的命令,将(SECTION的)所有3列分配为唯一的,而不是仅仅1列?如果是,如何?

共有1个答案

仉臻
2023-03-14

foreign key (SectionNo, Semester) references Section(SectionNo, Semester),

要求对SectionNo和SECTION这对列有唯一的约束。

CREATE TABLE class_scheduling_01.section
(
sectionno integer NOT NULL,
semester character varying(16) COLLATE pg_catalog."default" NOT NULL,
courseid character varying(16) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT section_pkey PRIMARY KEY (sectionno, semester, courseid),
CONSTRAINT section_sectionno_key UNIQUE (sectionno),
CONSTRAINT section_courseid_fkey FOREIGN KEY (courseid)
    REFERENCES class_scheduling_01.course (courseid) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION,
-- Unique constraint on the pair
CONSTRAINT your_constraint_name UNIQUE (SectionNo, Semester)
);

这一改变应该会让这些SQL声明成功。我没有检查这是否是一个好主意。

SQL不区分大小写。

我明白你的意思,但这是一种糟糕的思考方式。

PostgreSQL将未加引号的标识符折叠为小写。因此PostgreSQL会将标识符SQLSqlsql视为它们都是sql。引用或分隔的标识符,如"Select"总是指向表或列;它从未被解释为关键字。引用的标识符区分大小写。您无法成功地将表"Select"引用为Select

 类似资料:
  • 我正在为班级注册建立一个数据库,但我在“注册”表上遇到了问题。我需要将分区中的所有主键传递到注册中,但我还想传递一个附加键(“sectionNumber”)。然而,我不想让“sectionNumber”成为“Sections”主键的一部分,因为我不想将sectionNumber传递到每个我有外键的表中,这些外键来自“Sections”有人对如何解决这个问题有什么建议吗?我一直得到下面的错误。

  • 我试着用这些代码使用postgresql创建表,但人们一直说,并没有唯一的约束匹配引用表的给定键。当我试图创建表、节和评估时,出现了这个消息。 请帮帮我。 )我更改了create语句的顺序,并在表中添加了unique key,但仍然不起作用。

  • 试图在Postgres 9.1中创建此示例表结构: 运行上述代码会产生一个错误,这对我来说没有意义: 有人能解释为什么会出现这种错误吗?

  • 所以我得到了一个错误,没有唯一的约束匹配我的一个表的给定键。我有两个表:用户和项目,其中我们有一个多对一的关系(一个用户有多个项目)。我用炼金术来做这一切: 要创建表,我在我的应用程序中有以下语句。py': 错误是:没有唯一的约束匹配引用表用户的给定键。 我不确定哪里出错了,因为我在ItemModel中有一个外键与UserModel中的主键匹配。欢迎任何建议/提示! 谢谢

  • 问题内容: 我有一个表定义: 我正在尝试创建失败的表 错误是: 我不确定如何解决此问题。 问题答案: 我认为您正在寻找两个单独的外键:

  • 我在创建一个包含外键的表时遇到问题,该外键来自另一个包含两个主键的表。 以下是表格: 无法创建表risk_final并给我错误: 错误:没有唯一的约束匹配引用表"names_types"的给定键 我该怎么解决呢?