错误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
,CONSTRAINTOrdrelinje_fk
FOREIGN KEY(Ordre
)REFERENCESOrdre
(OrdreID
))
我已经看过关于这个主题的其他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>;
这个对我有用。
我希望这可以帮助你!