重复键更新失败,错误“无法添加或更新子行”

时间:2012-02-28 22:03:10

标签: mysql insert-update

我有一个复合主键“name”和“id”的表。字段实际上是“名称”,“id”,“电话”,“金额”,“单位”,“别名”。我有查询

 insert into MyTable (name,id,phone,amount) select "henry" as name, id,phone,amount from anotherTable
 on duplicate key update phone=values(phone),amount=values(amount).

MySQL发出以下错误:

 Cannot add or update a child row: a foreign key constraint fails.

BTW,“id”是外键。

任何帮助?

如下所述,其他表的架构是

 CREATE TABLE `otherTable` (
 `otherId` int(11) NOT NULL AUTO_INCREMENT,
 `DOBId` int(11) NOT NULL,
 `bankAccount` int(11) DEFAULT NULL,
 `partialAmount` int(11) NOT NULL DEFAULT '0',
 `id` int(11) NOT NULL,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `notes` varchar(299) DEFAULT NULL,
 `latitude` decimal(8,5) DEFAULT NULL,
 `longitude` decimal(8,5) DEFAULT NULL,
  PRIMARY KEY (`otherId `),
  KEY `DOBId ` (`DOBId `),
  KEY `bankAccount ` (`bankAccount `),
  KEY `id ` (`id `)
) ENGINE=InnoDB AUTO_INCREMENT=3305 DEFAULT CHARSET=utf8;

for myTable

CREATE TABLE `myTable` (
  `name` int(11) NOT NULL,
  `id` int(11) NOT NULL,
  `appleNumber` int(11) DEFAULT NULL,
  `amount` int(11) DEFAULT NULL,
  `windowsNumber` int(11) DEFAULT NULL,
  `phone` int(11) DEFAULT NULL,
  `pens` int(11) DEFAULT NULL,
  `pencils` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`,`id`),
  KEY `id` (`id`),
  CONSTRAINT `myTable_ibfk_1` FOREIGN KEY (`id`) REFERENCES `yet_another` (`id`)

2 个答案:

答案 0 :(得分:3)

问题似乎是myTable上的FK约束引用了yet_another的ID,因此当您从anotherTable插入ID时,您正在破坏此FK约束。 anotherTable表中不存在yet_another中的ID。

根据您发布的抽象模式,了解这是一个黑暗的镜头。如果你想要一个更加可靠的答案,我必须看到实际的架构。

答案 1 :(得分:0)

on duplicate key适用于主键。我认为你使用的是innodb。这在外键约束上失败了。表MyTable的哪些值是外键?请发布显示所有键和约束的表的create语句,以获得更详细的帮助。

只是一个猜测,但是对于笑话,我认为这是一个不在插入内的列,不允许空值的外键。