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

我已经在MySQL Workbench中创build了表,如下所示:

ORDRE表:

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; 

PRODUKT表格:

 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表:

 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表中的值我得到:

错误代码:1452.无法添加或更新子行:外键约束失败( Ordrelinje ,CONSTRAINT Ordrelinje_fk FOREIGN KEY( Ordre )REFERENCES OrdreOrdreID ))

我已经看过关于这个主题的其他post,但没有运气。 我在监督什么或者有什么想法做什么?

从使用FOREIGN KEY约束获取

外键关系涉及一个保存中心数据值的父表,以及一个具有相同值的子表指向其父项。 FOREIGN KEY子句在子表中指定。

如果父表中没有匹配的候选键值,它将拒绝任何尝试在子表中创build外键值的INSERT或UPDATE操作。

所以你的错误Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails本质上意味着,您试图将一行添加到您的Ordrelinje表中没有匹配的行(OrderID)在Ordre表中存在。

您必须先将行插入Ordre表。

你正在得到这个约束检查,因为ordre表没有insert命令提供的引用顺序id。

要在ordrelinje中插入值,首先必须在ordre表中input值,并在orderlinje表中使用相同的ordreID。

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

ORDRELINJE表与ORDER表使用外键约束constraint Ordrelinje_fk foreign key(Ordre) references Ordre(OrdreID)根据哪个Ordre int NOT NULL,ORDRELINJE列必须匹配ORDER表的任何Ordre int NOT NULL,列。

现在这里发生了什么,当你在ORDRELINJE表中插入新行时,根据fk约束Ordrelinje_fk它检查ORDER表,如果OrdreID存在与否,并且因为它不与任何OrderId匹配,编译器正在抱怨外键违反。 这是你得到这个错误的原因。

外键是另一个表的主键,您可以在任何表中使用它们之间的链接。 该键由您在创build表时指定的外键约束绑定。 对数据的任何操作都不能违反这个约束。 违反这个约束可能会导致这样的错误。

希望我明确。

在插入外键属性值时,首先validation父类关系中的属性types以及主键属性值,如果父关系中的值匹配,则可以方便地插入/更新子属性值。

我经常通过命令放弃foreign_key

 ALTER TABLE <table_name> DROP FOREIGN KEY <fk_foreign_key>; 

这个对我有用。

我希望这可以帮助你!