【问题标题】:Weird ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails奇怪的错误 1452 (23000):无法添加或更新子行:外键约束失败
【发布时间】:2011-07-22 22:40:12
【问题描述】:

我试图查看其他人的问题,但它们似乎都与我的不同。

我的问题是我不断收到错误 1452 问题“错误 1452 (23000): 无法添加或更新子行:外键约束失败”,即使我认为外键在约束之下。

我的桌子是

CREATE TABLE `Users` (
  `id` int(11) unsigned NOT NULL,
  `username` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `joinTime` datetime DEFAULT NULL,
  `isRemoved` tinyint(3) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `username` (`username`),
  KEY `isRemoved` (`isRemoved`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `RoleGroups` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  `description` text NOT NULL,
  `createdTime` datetime NOT NULL,
  `lastUpdate` datetime DEFAULT NULL,
  `isRemoved` tinyint(3) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `isRemoved` (`isRemoved`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

CREATE TABLE `RoleGroupsUsers` (
  `groupId` int(11) unsigned NOT NULL,
  `userId` int(11) unsigned NOT NULL,
  `addedTime` datetime NOT NULL,
  KEY `fkGroup_groupId` (`groupId`),
  KEY `fkGroup_userId` (`userId`),
  CONSTRAINT `fkGroup_groupId` FOREIGN KEY (`groupId`) REFERENCES `RoleGroups` (`id`),
  CONSTRAINT `fkGroup_userId` FOREIGN KEY (`userId`) REFERENCES `Users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我从用户表中隐藏了一些属性以简化问题。

我目前的数据是

mysql> SELECT id, username, joinTime FROM Users ORDER BY joinTime ASC;
+----------+-----------+---------------------+
| id       | username  | joinTime            |
+----------+-----------+---------------------+
|        1 | admin     | 2011-07-22 01:20:29 |
|        2 | johndoe   | 2011-07-22 01:26:07 |
|        3 | janedoe   | 2011-07-22 01:26:07 |
| 31201958 | yonas1    | 2011-07-22 01:32:38 |
| 49494052 | bvnarayan | 2011-07-22 11:51:05 |
+----------+-----------+---------------------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM RoleGroups;
+----+---------------+---------------+---------------------+------------+-----------+
| id | name          | description   | createdTime         | lastUpdate | isRemoved |
+----+---------------+---------------+---------------------+------------+-----------+
|  1 | member        | Member        | 2011-07-22 01:20:29 | NULL       |         0 |
|  2 | administrator | Administrator | 2011-07-22 01:20:29 | NULL       |         0 |
+----+---------------+---------------+---------------------+------------+-----------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM RoleGroupsUsers;
+---------+----------+---------------------+
| groupId | userId   | addedTime           |
+---------+----------+---------------------+
|       2 |        1 | 2011-07-22 01:20:29 |
|       1 |        1 | 2011-07-22 01:20:29 |
|       1 |        2 | 2011-07-22 01:26:07 |
|       1 |        3 | 2011-07-22 01:26:07 |
|       1 | 31201958 | 2011-07-22 01:32:38 |
+---------+----------+---------------------+
5 rows in set (0.00 sec)

当我尝试时弹出错误

mysql> INSERT INTO RoleGroupsUsers (groupId, userId, addedTime) VALUES (1, 49494052, '2011-07-22 14:51:05');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`roswell`.`rolegroupsusers`, CONSTRAINT `fkGroup_groupId` FOREIGN KEY (`groupId`) REFERENCES `RoleGroups` (`id`))

这真的很奇怪,因为 RoleGroups 表中已经有一行 ID 为 1。更奇怪的是,这个错误一直在我的一个工作站中发生,而另一个运行良好。我的开发工作站使用 Windows 7 和 XAMPP 服务器。我的另一个工作站使用 OS X 和 MAMP。

更新

几个小时前它在第二个工作站上工作,但我不知道为什么现在它不起作用。 (可能是因为我在第二个工作站做了一些我不知道的配置)

再次更新

MySQL 版本

#/Applications/MAMP/Library/bin/mysql --version
/Applications/MAMP/Library/bin/mysql  Ver 14.14 Distrib 5.5.9, for osx10.4 (i386) using  EditLine wrapper

【问题讨论】:

  • 你在 OSX 机器上运行什么版本的 MySQL?见:stackoverflow.com/questions/5566991/…
  • /Applications/MAMP/Library/bin/mysql --version /Applications/MAMP/Library/bin/mysql Ver 14.14 Distrib 5.5.9,用于 osx10.4 (i386) 使用 EditLine 包装器跨度>

标签: mysql


【解决方案1】:

您需要在 OSX 机器上升级 MySQL。这是 OSX 上 MySQL 5.5.9 到 5.5.12 版本中的一个错误。

参见:MySQL bug reportMySQL 5.5.13 patch notes(参考第 2 项)

【讨论】:

  • 谢谢,我会尝试升级 MySQL。有问题我会告诉你的。
  • 完美,这让我为 AGES 发疯。
  • 我升级到 MAMP PRO 2.0.5,它恰好与 MySQL 5.5.9 一起打包。在我看到这篇文章并看到问题是 mysql 一级之前,尝试调试这个(好几个小时)真是太糟糕了。谢谢发帖。
猜你喜欢
  • 1970-01-01
  • 2015-12-06
  • 2014-05-10
  • 2015-02-04
  • 2013-06-11
  • 2019-03-29
  • 2018-05-14
  • 1970-01-01
  • 2013-05-11
相关资源
最近更新 更多