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

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_fk外键(order)

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


当前回答

您应该在每个表中插入至少一个raw(您希望外键指向的表),然后您可以插入或更新外键的值

其他回答

只是要找别的东西。如果您必须从一个表中删除记录,并期望值从1开始,那么您可能会得到这个错误。解决方案是在所有父表上运行SHOW * FROM表名。当我这样做的时候,我注意到在其中一个表中,我有一个问题,必须删除一些记录,主键值不是我所期望的,从以前的SELECT *。

您必须删除子表中与父表主键没有任何对应外键值的数据。或者删除子表中的所有数据,然后插入与父表中主键值相同的新数据。这应该有用。

我得到这个问题,即使我的父表有我在我的子表中引用的所有值。问题似乎是我不能向一个外键添加多个子引用。换句话说,如果我有5行数据引用了相同的外键,MySQL只允许我上传第一行,并给我错误1452。

对我来说有用的是输入代码“SET GLOBAL FOREIGN_KEY_CHECKS=0”。在那之后,我关闭MySQL,然后重新启动它,我能够上传我所有的数据,没有任何错误。然后我输入“SET GLOBAL FOREIGN_KEY_CHECKS=1”来设置系统恢复正常,尽管我不完全确定FOREIGN_KEY_CHECKS做什么。希望这能有所帮助!

您得到这个约束检查是因为orderre表没有插入命令中提供的引用orderid。

要在Orderlinje中插入值,首先必须在orderre表中输入值,并在Orderlinje表中使用相同的orderid。

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

在我的例子中,表格完全一致。

不管怎样,我得到这个错误是因为我(意外地)在同一个字段上创建了多个FK约束。

我运行下面的查询来显示所有的键:

SELECT *
FROM information_schema.table_constraints
WHERE constraint_schema = 'my_db_name'

我用以下查询删除了错误的:

ALTER TABLE my_table
DROP FOREIGN KEY wrong_fk_constraint; 

你也可以运行这个查询来检查它:

SHOW CREATE TABLE my_table;