Mysql 错误1452:无法添加或更新子行:外键约束失败
我在MySQL Workbench中创建了如下表: 顺序表:Mysql 错误1452:无法添加或更新子行:外键约束失败,mysql,sql,mariadb,mysql-error-1452,Mysql,Sql,Mariadb,Mysql Error 1452,我在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 (Kun
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;
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;
产品表:
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;
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表:
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;
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。无法添加或更新子行:外键约束失败(srdjank
Ordrelinje
,约束Ordrelinje\u fk
外键(Ordre
)引用Ordre
(OrdreID
)
我看过其他关于这个话题的帖子,但是运气不好。
我是在监督什么事情还是知道该怎么做 您得到这个约束检查是因为
Ordre
表没有在insert命令中提供的引用OrdreID
要在Ordrelinje
中插入值,首先必须在Ordre
表中输入值,并在Orderlinje
表中使用相同的OrdreID
或者,您可以删除NOTNULL约束并在其中插入空值。摘自
外键关系涉及一个包含
中心数据值,以及具有相同值的子表
回到它的父母身边。在子类中指定外键子句
桌子
它将拒绝尝试创建的任何插入或更新操作
如果没有匹配项,则子表中的外键值
父表中的候选键值
所以你的错误代码是:1452。无法添加或更新子行:外键约束失败本质上意味着,您正试图将一行添加到Ordrelinje
表中,Ordre
表中不存在与之匹配的行(OrderID)
您必须首先将该行插入到
Ordre
表中。您的ORDRINJE
表使用外键约束链接到ORDRINJE\u fk外键(Ordre)引用Ordre(OrdreID)
,根据该约束,Ordre int NOT NULL,
表格的列ORDRELINJE
必须匹配任何Ordre int NOT NULL,
表格的列ORDER
现在发生的事情是,当您将新行插入ORDRELINJE
表时,根据fk constraintORDRELINJE\u fk
它正在检查ORDER
表是否存在OrdreID
,并且由于它与任何OrderId都不匹配,编译器正在抱怨外键冲突。这就是您出现此错误的原因
外键是另一个表的主键,您可以在任何表中使用它来链接这两个表。此键由创建表时指定的外键约束绑定。对数据的任何操作都不得违反此约束。违反此约束可能会导致如下错误
希望我讲清楚。插入外键属性值时,首先验证属性类型,以及父关系中的主键属性值,如果父关系中的值匹配,然后可以轻松插入/更新子属性值。必须删除子表中与父表主键没有任何对应外键值的数据。或者删除子表中的所有数据,然后插入与父表中主键具有相同外键值的新数据。这应该行得通。
这里还有一个您应该在每个表中至少插入一个raw(您希望外键指向的表),然后您可以插入或更新外键的值此错误通常会发生,因为我们在子表的引用字段中有一些值,在父表的引用/候选字段中不存在 有时,当我们对现有表应用外键约束时,表中已有数据时,可能会出现此错误。其他一些答案建议从子表中完全删除数据,然后应用约束。但是,当子表中已经有工作/生产数据时,这不是一个选项在大多数情况下,我们需要更新子表中的数据(而不是删除它们) 现在,我们可以利用
Left Join
查找子表中的所有行,这些行在父表中没有匹配的值。以下查询有助于获取那些不匹配的行:
SELECT child_table.*
FROM child_table
LEFT JOIN parent_table
ON parent_table.referenced_column = child_table.referencing_column
WHERE parent_table.referenced_column IS NULL
现在,您通常可以执行以下一个(或多个)步骤来修复数据
null
数据固定后,我们可以使用
altertable
语法应用外键约束。您应该将数据从主表中的引用键添加到子表中的外键
这意味着不要向外键添加随机数据،只使用可访问的主键中的数据
问题在于外键约束。默认情况下(设置外键检查=1)。“外键检查”选项指定是否检查InnoDB表的外键约束 在运行查询之前,我们可以将外键检查设置为禁用 在运行查询之前,请执行其中一行,然后才能成功运行查询。:) 1) 会议(推荐) 2) 全球
这可以通过先在父表中插入相应的记录,然后在子选项卡中插入记录来解决