错误1452:无法添加或更新子行:外键约束失败

2024-03-19 05:42:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MySQL Workbench中创建了表,如下所示:

订单表:

CREATE TABLE Ordre (
  OrdreID   INT NOT NULL,
  OrdreDato DATE DEFAULT NULL,
  KundeID   INT  DEFAULT NULL,
  CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID),
  CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID)
)
  ENGINE = InnoDB;

产品表:

CREATE TABLE Produkt (
  ProduktID          INT NOT NULL,
  ProduktBeskrivelse VARCHAR(100) DEFAULT NULL,
  ProduktFarge       VARCHAR(20)  DEFAULT NULL,
  Enhetpris          INT          DEFAULT NULL,
  CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID)
)
  ENGINE = InnoDB;

ORDRELINJE table:

CREATE TABLE Ordrelinje (
  Ordre         INT NOT NULL,
  Produkt       INT NOT NULL,
  AntallBestilt INT DEFAULT NULL,
  CONSTRAINT Ordrelinje_pk PRIMARY KEY (Ordre, Produkt),
  CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID),
  CONSTRAINT Ordrelinje_fk1 FOREIGN KEY (Produkt) REFERENCES Produkt (ProduktID)
)
  ENGINE = InnoDB;

因此,当我试图将值插入ORDRELINJE表时,我得到:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (srdjank.Ordrelinje, CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID))

我看过其他关于这个话题的帖子,但是运气不好。 我是在监督什么还是知道该怎么做?


Tags: keydefaultcreatetablenotnullintreferences
3条回答

取自Using FOREIGN KEY Constraints

Foreign key relationships involve a parent table that holds the central data values, and a child table with identical values pointing back to its parent. The FOREIGN KEY clause is specified in the child table.

It will reject any INSERT or UPDATE operation that attempts to create a foreign key value in a child table if there is no a matching candidate key value in the parent table.

因此,您的错误Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails实质上意味着,您正在尝试向Ordrelinje表中添加一行,而Ordre表中没有匹配的行(OrderID)。

必须首先将行插入到Ordre表中。

必须删除子表中与父表主键没有对应外键值的数据。或者删除子表中的所有数据,然后在父表中插入与主键具有相同外键值的新数据。这应该管用。 这里还有一个youtube video

您得到这个约束检查是因为Ordre表没有insert命令中提供的引用OrdreID

要在Ordrelinje中插入值,首先必须在Ordre表中输入值,并在Orderlinje表中使用相同的OrdreID

或者,可以删除NOTNULL约束并在其中插入一个空值。

相关问题 更多 >