我在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)

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


当前回答

对于PhpMyAdmin,转到创建外键的表结构,然后单击关系视图,在其中选择删除和更新部分下的No Action。 注:这个工作适合我。 在这里输入图像描述

其他回答

这可以通过先在父表中插入各自的记录,然后在子表的各自列中插入记录来解决。还要检查列的数据类型和大小。它应该与父表列相同,甚至引擎和排序规则也应该相同。 试试这个!这就是我解决问题的方法。如果我说错了,请指正。

你的问题的答案是你必须在主键和辅助键中设置相同的值。 谢谢

也许上面的回答更好,但是当在mysql工作台中工作时,你不需要立即提交事务,你可以同时提交父元素和子元素。所以用sql或在gui中设置父进程,在gui / sql中添加子进程并并发提交。

如果在代码中工作并得到这个问题,您可以创建一个工厂来创建父节点,然后创建子节点/ join。

理论上,您需要一个Order来拥有OrderId,从而创建一个Order。您可以创建一个OrderId,并且该OrderId可能有许多相关联的产品,然后您可以将这些产品添加到OrderId或按照您的意愿进行处理。

实际上,我就像这样解决了“插入到databasename。Tablename”它起作用了。之后,当我尝试添加数据,如“插入到databasename”它的工作。

你应该从主表中的引用键添加数据到子表中的外键 这意味着不向外键،添加随机数据,只使用可访问的主键中的数据

外键中数据的描述