【问题标题】:Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails?Mysql 错误 1452 - 无法添加或更新子行:外键约束失败?
【发布时间】:2015-02-04 22:31:56
【问题描述】:

我正在帮助一个朋友处理他的数据库,为他排除错误,它不断生成 Mysql 错误 1452 - 无法添加或更新子行:外键约束失败。

知道这是怎么回事吗?我一直在看它一个小时,无法找出一直失败的原因。

编辑:更新代码

--删除表格

删除表评论;

DROP TABLE Boardgames_Owned;

DROP TABLE 棋盘游戏;

DROP TABLE 存储;

DROP TABLE 朋友;

创建表评论(ReviewerID int(4) NOT NULL、Score varchar(10)、cmets varchar(50) NOT NULL、Date_of_review varchar(10) NOT NULL、CONSTRAINT PKReviewerID PRIMARY KEY (ReviewerID));

CREATE TABLE Boardgames_owned ( Game_Name varchar(50) NOT NULL, time_played varchar(24), TTM_Ratio char(12), Total_Cost char(12) NOT NULL, Score char(10), Expansion_pack char(3), BoughtID int( 4) NOT NULL, CONSTRAINT PKBoughtID PRIMARY KEY (BoughtID));

CREATE TABLE Boardgames (Price decimal(12,2) NOT NULL, pre_order char(3), GameName varchar(50), CONSTRAINT PKGameName PRIMARY KEY (GameName));

CREATE TABLE Store (StoreID int(4) NOT NULL, StoreName varchar(50) NOT NULL, price_avg decimal(12,2) NOT NULL, CONSTRAINT PKStoreID PRIMARY KEY (StoreID));

CREATE TABLE Friends (StoreID int(4) NOT NULL, BoughtID int(4) NOT NULL, ReviewerID int(4) NOT NULL, Faddress varchar(50), Ffirstname varchar(20) NOT NULL, Flastname varchar(15) NOT NULL, Time_availible char(8) NOT NULL, Perfered_genre char(10), Money_spent decimal(12,2) NOT NULL, GameName varchar(50), CONSTRAINT PKFristname PRIMARY KEY (Ffirstname), CONSTRAINT FKStoreID FOREIGN KEY (StoreID) REFERENCES Store(StoreID), CONSTRAINT FKGameName FOREIGN KEY (GameName) REFERENCES Boardgames(GameName), CONSTRAINT FKBoughtID 外键 (BoughtID) 参考 Boardgames_owned(BoughtID),约束 FKReviewerID FOREIGN KEY (ReviewerID) REFERENCES 评论(ReviewerID));

--填充评论表

插入评论(评论者 ID、分数、评论、评论日期) 价值观 (1112, '5.0', '需要呻吟', '05-17-20');

插入评论(评论者 ID、分数、评论、评论日期) 价值观 (1113, '5.0', '需要呻吟', '05-17-20');

插入评论(评论者 ID、分数、评论、评论日期) 价值观(1114, '5.0', '需要呻吟', '05-17-20');

插入评论(评论者 ID、分数、评论、评论日期) 价值观 (1115, '5.0', '需要呻吟', '05-17-20');

插入评论(评论者 ID、分数、评论、评论日期) 价值观 (1116, '5.0', '需要呻吟', '05-17-20');

插入评论(评论者 ID、分数、评论、评论日期) 价值观 (1117, '5.0', '需要呻吟', '05-17-20');

--填充 boardgames_owned

INSERT INTO boardgames_owned(Game_Name、time_played、TTM_Ratio、Total_Cost、Score、Expansion_pack、BoughtID) 值('braka', '20.00', '1.1', '1.2', '1.3', '是的', 第1234章;

INSERT INTO boardgames_owned(Game_Name、time_played、TTM_Ratio、Total_Cost、Score、Expansion_pack、BoughtID) 值('braka', '20.00', '1.1', '1.2', '1.3', '是的', 第1235章;

INSERT INTO boardgames_owned(Game_Name、time_played、TTM_Ratio、Total_Cost、Score、Expansion_pack、BoughtID) 值('braka', '20.00', '1.1', '1.2', '1.3', '是的', 第1237章;

INSERT INTO boardgames_owned(Game_Name、time_played、TTM_Ratio、Total_Cost、Score、Expansion_pack、BoughtID) 值('braka', '20.00', '1.1', '1.2', '1.3', '是的', 第1236章;

INSERT INTO boardgames_owned(Game_Name、time_played、TTM_Ratio、Total_Cost、Score、Expansion_pack、BoughtID) 值('braka', '20.00', '1.1', '1.2', '1.3', '是的', 第1238章);

INSERT INTO boardgames_owned(Game_Name、time_played、TTM_Ratio、Total_Cost、Score、Expansion_pack、BoughtID) 值('braka', '20.00', '1.1', '1.2', '1.3', '是的', 第1239章;

--填充棋盘游戏

INSERT INTO 棋盘游戏(价格、预购、游戏名称) 值(25.99,'是', 'ml2');

INSERT INTO 棋盘游戏(价格、预购、游戏名称) 值(25.99,'是', 'ml2');

INSERT INTO 棋盘游戏(价格、预购、游戏名称) 价值观(24.99'是', 'ml2');

INSERT INTO 棋盘游戏(价格、预购、游戏名称) 值(23.99,'是', 'ml2');

INSERT INTO 棋盘游戏(价格、预购、游戏名称) 值(22.99,'是', 'ml2');

INSERT INTO 棋盘游戏(价格、预购、游戏名称) 值(21.99,'是', 'ml2');

--填充商店

INSERT INTO 商店(StoreID、StoreName、price_avg) VALUES (1112,'bars',20.99);

INSERT INTO 商店(StoreID、StoreName、price_avg) VALUES (1113,'bars',20.99);

INSERT INTO 商店(StoreID、StoreName、price_avg) VALUES (1114,'bars',20.99);

INSERT INTO 商店(StoreID、StoreName、price_avg) VALUES (1115,'bars',20.99);

INSERT INTO 商店(StoreID、StoreName、price_avg) VALUES (1116,'bars',20.99);

--填充好友表

插入好友(Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '1234 scryamor blvd.', '亚当', “史密斯”, '5:00 PM', '角色扮演游戏', 25, '探路者');

插入好友(StoreID、BoughtID、ReviewerID、Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '戈德杰里路 5678 号', '布拉克', '所以', '3:00 PM', '战争', 60, '风险');

插入好友(StoreID、BoughtID、ReviewerID、Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '西大街 1337 号', “彼得”, 'kliage', '下午 2:00', '战争', 13, '维斯特洛之战');

插入好友(StoreID、BoughtID、ReviewerID、Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '101 Vault 博士', “奥利弗”, '灼热', '5:00 PM', '卡片', 45, '芒奇金');

插入好友(StoreID、BoughtID、ReviewerID、Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '117 Sierra rd.', '约翰', '首席', '9:00 PM', '恐怖', 00, '阿卡姆恐怖');

插入好友(StoreID、BoughtID、ReviewerID、Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '1489 klesa blvd.', '梅丽莎', '达里亚', '11:00 AM', '骰子', 24, '漫威骰子大师');

插入好友(StoreID、BoughtID、ReviewerID、Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '113 米卡尔赫兹路', '凯蒂琳', '塞尼亚', '5:00 PM', '战争', 10, '战吼');

插入好友(StoreID、BoughtID、ReviewerID、Faddress、Ffirstname、Flastname、Time_availible、Perfered_genre、Money_spent、GameName) 价值观 (1111, 1234, 1234, '546 Alkatraz 博士', “文森特”, '恩斯特罗姆', '晚上 7 点 30 分', '卡片', 40, “指环王:纸牌游戏”);

-- 旧代码--

--DROP TABLES

DROP TABLE Reviews;

DROP TABLE Boardgames_Owned;

DROP TABLE Boardgames;

DROP TABLE Store;


DROP TABLE Friends;


CREATE TABLE Reviews ( ReviewerID int(4) NOT NULL, Score decimal(2,2), comments varchar(50) NOT NULL, Date_of_review varchar(10) NOT NULL, CONSTRAINT PKReviewerID PRIMARY KEY (ReviewerID));


CREATE TABLE Boardgames_owned ( Game_Name varchar(50) NOT NULL, time_played varchar(24), TTM_Ratio decimal(12,2), Total_Cost decimal(12,2) NOT NULL, Score decimal(10,10), Expansion_pack char(3), BoughtID int(4) NOT NULL, CONSTRAINT PKBoughtID PRIMARY KEY (BoughtID));


CREATE TABLE Boardgames ( Price decimal(12,2) NOT NULL, pre_order char(3), GameName varchar(50), CONSTRAINT PKGameName PRIMARY KEY (GameName));


CREATE TABLE Store ( StoreID int(4) NOT NULL, StoreName varchar(50) NOT NULL, price_avg decimal(12,2) NOT NULL, CONSTRAINT PKStoreID PRIMARY KEY (StoreID));


CREATE TABLE Friends ( StoreID int(4) NOT NULL, BoughtID int(4) NOT NULL, ReviewerID int(4) NOT NULL, Faddress varchar(50), Ffirstname varchar(20) NOT NULL, Flastname varchar(15) NOT NULL, Time_availible char(8) NOT NULL, Perfered_genre char(10), Money_spent decimal(12,2) NOT NULL, GameName varchar(50), CONSTRAINT PKFfristname PRIMARY KEY (Ffirstname), CONSTRAINT FKStoreID
                      FOREIGN KEY (StoreID) REFERENCES Store(StoreID), CONSTRAINT FKGameName
                      FOREIGN KEY (GameName) REFERENCES Boardgames(GameName), CONSTRAINT FKBoughtID
                      FOREIGN KEY (BoughtID) REFERENCES Boardgames_owned(BoughtID), CONSTRAINT FKReviewerID
                      FOREIGN KEY (ReviewerID) REFERENCES Reviews(ReviewerID));

 --Populating friends table

INSERT INTO friends (Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'1234 scryamor blvd.','Adam','Smith','5:00pm','RPG',25.00,'Pathfinder');


INSERT INTO friends (StoreID, BoughtID, ReviewerID, Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'5678 Goldjerry rd.','Brak','So','3:00pm','War',60.00,'Risk');


INSERT INTO friends (StoreID, BoughtID, ReviewerID, Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'1337 West ave.','Peter','kliage','2:00pm','War',13.00,'War for Westeros');


INSERT INTO friends (StoreID, BoughtID, ReviewerID, Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'101 Vault dr.','Oliver','Sear','5:00pm','Card',45.00,'Munchkin');


INSERT INTO friends (StoreID, BoughtID, ReviewerID, Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'117 Sierra rd.','John','Chief','9:00pm','Horror',00.00,'Arkham Horror');


INSERT INTO friends (StoreID, BoughtID, ReviewerID, Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'1489 klesa blvd.','Melissa','Darya','11:00am','Dice',24.50,'Marvel Dice Masters');


INSERT INTO friends (StoreID, BoughtID, ReviewerID, Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'113 Mikalhertz rd','Catilyn','Senja','5:00pm','War',10.00,'BattleCry');


INSERT INTO friends (StoreID, BoughtID, ReviewerID, Faddress, Ffirstname, Flastname, Time_availible, Perfered_genre, Money_spent, GameName)
VALUES (1111,1234,1234,'546 Alkatraz dr.','Vincent','Engstrom','7:30pm','Card',40.00,'Lord Of The Rings: The Card Game');

 */

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    您创建了多个表,其中 一个 具有 FOREIGN KEYs,这意味着某些注册表依赖于其他表中的注册表。

    在您的情况下,您在 friends 表上插入引用所有其他表的数据(来自您的创建脚本)。尝试先填充这些,然后填充朋友表。

    【讨论】:

    • 我更新了原始帖子,使用我收到的完整代码,重新排列了代码,但似乎没有修复它,还有更多想法吗?(基于新代码?)
    • 现在你有另一个错误。你总是把你遇到的错误放在你的问题上。我已经测试了您的脚本,并且您在表 boardgames 上遇到了主键约束错误,因为游戏名称是主键,而您设置的都是相同的“m12”,要么更改棋盘游戏,要么取出主键。
    • 在桌友上插入数据,它不在桌游上。查看朋友插入中的游戏名称列
    【解决方案2】:

    CREATE TABLE Friends ( StoreID int(4) NOT NULL, BoughtID int(4) NOT NULL, ReviewerID int(4) NOT NULL, Faddress varchar(50), Ffirstname varchar(20) NOT NULL, Flastname varchar(15) NOT NULL, Time_availible char(8) NOT NULL, Perfered_genre char(10), Money_spent decimal(12,2) NOT NULL, GameName varchar(50), CONSTRAINT PKFfristname PRIMARY KEY (Ffirstname), CONSTRAINT FKStoreID
                      FOREIGN KEY (StoreID) REFERENCES Store(StoreID), CONSTRAINT FKGameName
                      FOREIGN KEY (GameName) REFERENCES Boardgames(GameName), CONSTRAINT FKBoughtID
                      FOREIGN KEY (BoughtID) REFERENCES Boardgames_owned(BoughtID), CONSTRAINT FKReviewerID
                      FOREIGN KEY (ReviewerID) REFERENCES Reviews(ReviewerID));
    

    Friends 表对StoreBoardGamesBoardgames_ownedReviews 表有约束,这意味着在字段中为这些对应的外键(StoreIDGameNameBoughtIDReviewerID) 必须存在于这些其他表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-11
      • 2014-05-10
      • 2021-12-28
      • 2014-10-23
      • 1970-01-01
      • 2019-03-29
      • 2018-05-14
      • 2013-05-11
      相关资源
      最近更新 更多