【问题标题】:1452 - Cannot add or update a child row: a foreign key constraint fails [duplicate]1452 - 无法添加或更新子行:外键约束失败[重复]
【发布时间】:2017-03-06 21:39:27
【问题描述】:

虽然我已经在父表中添加了必要的信息,但我遇到了外键问题。这是架构,选择语句显示父表中存在外键以及在子表中插入新数据时出错:

MariaDB [scannedmusic]> show create table chhymnal;

+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| chhymnal | CREATE TABLE `chhymnal` (<br>
  `CHhymnalID` int(5) unsigned NOT NULL,<br>
  `Title` varchar(30) DEFAULT NULL,<br>
  `CHNumber` int(5) unsigned DEFAULT NULL,<br>
  `Type` varchar(1) DEFAULT NULL,<br>
  `WorshipItemType` varchar(30) DEFAULT NULL,<br>
  `DateLastSung` date DEFAULT NULL,<br>
  `HighNote` varchar(5) DEFAULT NULL,<br>
  `UseThisWeek` tinyint(1) DEFAULT NULL,<br>
  `ServiceOrder` int(2) unsigned DEFAULT NULL,<br>
  `StartKey` varchar(2) DEFAULT NULL,<br>
  `EndKey` varchar(2) DEFAULT NULL,<br>
  `Tempo` int(1) unsigned DEFAULT NULL,<br>
  `TimeSig` varchar(7) DEFAULT NULL,<br>
  `CCLINumb` varchar(10) DEFAULT NULL,<br>
  PRIMARY KEY (`CHhymnalID`)<br>
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |<br>
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

集合中的 1 行(0.00 秒)

MariaDB [扫描音乐]> MariaDB [scannedmusic]> 显示创建表 chimages;

+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                                       |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| <br>chimages | CREATE TABLE `chimages` (<br>
  `CHImageID` int(5) unsigned NOT NULL,<br>
  `ImagePath` varchar(50) DEFAULT NULL,<br>
  `Instrument` varchar(30) DEFAULT NULL,<br>
  `CHhymnalID` int(5) DEFAULT NULL,<br>
  PRIMARY KEY (`CHImageID`),<br>
  CONSTRAINT `fk_images` FOREIGN KEY (`CHImageID`) REFERENCES `chhymnal` (`CHhymnalID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+<br>
1 row in set (0.00 sec)
MariaDB [scannedmusic]> SELECT * FROM `chhymnal` WHERE `CHhymnalID` = 343;
+------------+-------------------------+----------+------+-----------------+--------------+----------+-------------+--------------+----------+--------+-------+---------+----------+
| CHhymnalID | Title                   | CHNumber | Type | WorshipItemType | DateLastSung | HighNote | UseThisWeek | ServiceOrder | StartKey | EndKey | Tempo | TimeSig | CCLINumb |<br>
+------------+-------------------------+----------+------+-----------------+--------------+----------+-------------+--------------+----------+--------+-------+---------+----------+
|        343 | What a Day That Will Be |      762 | h    | Hymn            | 0000-00-00   | Db       |           0 |           12 | Ab       | Ab     |     3 | 3/4     |          |
+------------+-------------------------+----------+------+-----------------+--------------+----------+-------------+--------------+----------+--------+-------+---------+----------+

集合中的 1 行(0.00 秒)

MariaDB [scannedmusic]> INSERT INTO <br>Chimages(`CHImageID`,`ImagePath`,`CHhymnalID`) VALUES  ( 393, "\\BMP\\762_o1.bmp",343);

ERROR 1452 (23000):无法添加或更新子行:外键 约束失败 (scannedmusic.chimages, CONSTRAINT fk_images 外键 (CHImageID) 引用 chhymnal (CHhymnalID))

【问题讨论】:

  • 如果您删除了有 3 个不喜欢(或模式)的帖子,您的声誉积分将返还给您。

标签: mysql phpmyadmin


【解决方案1】:

您正在查看错误的列。在表chhymnal 中没有chhymnalid = 393 的行。

您的SELECT 语句表明您正在检查chhymnal 表中的chhymnalid,但您的外键约束适用于chimageid,在您的393 语句中具有393 值。

有两个选项 - 其中一个必须为真:

  1. 您的意思是您在创建外键约束时键入的内容,并且表chhymnal 中没有chhymnalid = 393 的行
  2. 您在外键约束中错误地引用了列名,它应该是chhymnalid 而不是chimageid

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2013-05-03
    • 2021-09-04
    相关资源
    最近更新 更多