如何解决向表添加数据时出现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脚本创建数据库。一个创建表,另一个导入数据。最初我以为某些外键定义不正确,但似乎它们都已正确设置。任何帮助都会很棒。请参阅下面的两个文件:
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);
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 举报,一经查实,本站将立刻删除。