微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

向表添加数据时出现MySQL错误1452

如何解决向表添加数据时出现MySQL错误1452

尝试通过MysqL Workbench导入数据时出现以下错误

Preparing...
Importing DataInputs.sql...
Finished executing script
ERROR 1452 (23000) at line 6: Cannot add or update a child row: a foreign key constraint fails (`nsldatabase`.`player`,CONSTRAINT `playsFor` FOREIGN KEY (`player_ID`) REFERENCES `team` (`team_ID`))
Operation Failed with exitcode 1

我正在通过两个不同的sql脚本创建数据库一个创建表,另一个导入数据。最初我以为某些外键定义不正确,但似乎它们都已正确设置。任何帮助都会很棒。请参阅下面的两个文件

这是NSLStructure.sql文件

DROP DATABASE IF EXISTS NSLdatabase;

CREATE SCHEMA IF NOT EXISTS NSLdatabase;
USE NSLdatabase;



CREATE TABLE player (
  player_ID int NOT NULL,player_Name text NOT NULL,player_Position text NOT NULL,player_Skills int NOT NULL,team_ID int NOT NULL,CONSTRAINT playerPK PRIMARY KEY (player_ID)
);

CREATE TABLE history (
  history_ID int NOT NULL,player_ID int NOT NULL,history_Desc text NOT NULL,history_sDate text NOT NULL,history_eDate text NOT NULL,CONSTRAINT recordPK PRIMARY KEY (history_ID,player_ID)
);

CREATE TABLE field (
  field_ID int NOT NULL,field_Name text NOT NULL,field_Location text NOT NULL,CONSTRAINT fieldPK PRIMARY KEY (field_ID)
);

CREATE TABLE team (
  team_ID int NOT NULL,team_Name text NOT NULL,team_City text NOT NULL,field_ID int NOT NULL,captain_ID int NOT NULL,team_coach text NOT NULL,CONSTRAINT teamPK PRIMARY KEY (team_ID)
);

CREATE TABLE matches (
  matches_ID int NOT NULL,matches_Date text NOT NULL,matches_score text NOT NULL,matches_Winner text NOT NULL,teamHost_ID int NOT NULL,teamGuest_ID int NOT NULL,CONSTRAINT matchesPK PRIMARY KEY (matches_ID)
);

CREATE TABLE goal (
  goal_ID int NOT NULL,goal_Time int NOT NULL,matches_ID int NOT NULL,CONSTRAINT goalPK PRIMARY KEY (goal_ID,matches_ID,player_ID)
);

ALTER TABLE team
  ADD CONSTRAINT capitanRel FOREIGN KEY (captain_ID)
  REFERENCES player (player_ID);

ALTER TABLE team
  ADD CONSTRAINT playedOnField FOREIGN KEY (field_ID)
  REFERENCES field (field_ID);

ALTER TABLE player
  ADD CONSTRAINT playsFor FOREIGN KEY (player_ID)
  REFERENCES team (team_ID);

ALTER TABLE history
  ADD CONSTRAINT hasRel FOREIGN KEY (player_ID)
  REFERENCES player (player_ID);

ALTER TABLE goal
  ADD CONSTRAINT scoredBy FOREIGN KEY (player_ID)
  REFERENCES player (player_ID);

ALTER TABLE goal
  ADD CONSTRAINT scoredIn FOREIGN KEY (matches_ID)
  REFERENCES matches (matches_ID);

ALTER TABLE matches
  ADD CONSTRAINT playedOn FOREIGN KEY (field_ID)
  REFERENCES field (field_ID);

ALTER TABLE matches
  ADD CONSTRAINT playedHost FOREIGN KEY (teamHost_ID)
  REFERENCES team (team_ID);

ALTER TABLE matches
  ADD CONSTRAINT playedGuest FOREIGN KEY (teamGuest_ID)
  REFERENCES team (team_ID);

这是DataInputs.sql文件

USE NSLdatabase;

INSERT INTO player
  VALUES
  (1,"paxton Pomykal","Midfielder",7.5,1);

INSERT INTO history
  VALUES
  (1,3,"US 20 squad","11/27/2003","12/19/2003");

INSERT INTO field
  VALUES
  (1,"Dicks Sporting Goods Park","Commerce City,CO");

INSERT INTO team
  VALUES
  (2,"Colorado Rapids","Denver,CO",1,"Robin Fraser");

INSERT INTO matches
  VALUES
  (1,"01/08/2019","0-1",2,2);

INSERT INTO goal
  VALUES
  (1,32,19);

解决方法

您没有以正确的顺序插入数据。父行需要在子行之前创建,因此不会违反外键约束。

因此,通常,您需要先在team行中创建行,然后再在player中创建行。基于相同的逻辑,您可能还需要研究其他依赖项。

另一种方法是在插入数据后 添加外键约束。但是,我不一定建议:如果数据具有无效关系,则将无法创建外键。相反,这样做更安全,因为会立即发出违规行的信号。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。