无法将值插入表中,外键约束不断失败

Posted

技术标签:

【中文标题】无法将值插入表中,外键约束不断失败【英文标题】:Can't insert values into table, foreign key constraint keeps failing 【发布时间】:2016-07-08 04:07:43 【问题描述】:

我正在尝试将此代码插入到我的 mysql 数据库上的相册表中

INSERT INTO `Albums` (`Albumid`, `Name`, `Numberoftracks`, `Artistid`,     ]
`Genre`) VALUES (1, "Innuendo", 12, "Queen", "Rock");

但每次我尝试时都会收到此错误。

1452 - Cannot add or update a child row: a foreign key constraint fails 
(`b4014107_db1/Albums`, CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`) 
REFERENCES `Artist` (`Artistid`))

我知道这与表中的外键有关,但我需要手动输入外键,因为它不是自动递增的。

这是表格代码。

CREATE TABLE `Albums` (  `Albumid` int(6) NOT NULL,  `Name` varchar(50) NOT 
NULL,  `Numberoftracks` int(11) NOT NULL,  `Artistid` int(6) NOT NULL,  
`Genre` varchar(50) NOT NULL,  PRIMARY KEY  (`Albumid`),  KEY `Artistid` 
(`Artistid`),  CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`)   
REFERENCES `Artist` (`Artistid`)) ENGINE=InnoDB DEFAULT CHARSET=latin1

我该如何解决这个问题?我需要在表格中输入数据。

【问题讨论】:

您在艺术家表中添加了艺术家“女王”吗?因为如果没有,你应该先添加艺术家,否则你的 FK 将永远被违反。 另外,ArtistId 是一个数字,您正尝试在其中添加一个 VARCHAR。您应该在表艺术家上添加艺术家“女王”并获取 ArtistId 以在您的此插入中使用。 【参考方案1】:

使用外键并不意味着任何隐式的自动递增。表中的外键意味着一条记录必须已经存在于另一个表中。 请参阅http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html(根据您的需要更改网址中的版本)

否则,如果您希望动态创建艺术家,请进行触发器。

希望它会澄清。

【讨论】:

【参考方案2】:

artistid 是表Albums 中的外键。当您尝试在子表中插入父表中不存在的外键时,会出现父子关系错误。 artistid 不在您的 Artist 表中。

另外,添加artistid的数据类型也不同。

取自mysql docs

外键关系涉及一个父表,该表包含 中心数据值,以及具有相同值指向的子表 回到它的父级。 FOREIGN KEY 子句在子句中指定 表。

它将拒绝任何尝试创建的 INSERT 或 UPDATE 操作 如果没有匹配项,则子表中的外键值 父表中的候选键值。

要消除您的错误,请先将Queens 艺术家插入您的Artist 表,然后您可以将其插入Albums 表。同时更正列artistid的数据类型。

【讨论】:

以上是关于无法将值插入表中,外键约束不断失败的主要内容,如果未能解决你的问题,请参考以下文章

完整性约束违规:1452 无法添加或更新子行:外键约束失败

如何修复“无法添加或更新子行:外键约束失败”[重复]

外键 Laravel 8 foreignId + 约束 - 无法添加或更新子行:外键约束失败

无法删除表:外键约束失败

MySql - 无法添加或更新子外键约束失败[重复]

创建外键时,phpmyadmin 中的外键约束失败