2012-02-28 64 views
1

我有一个包含复合主键“名称”和“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. 

顺便说一句, “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; 

为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`) 
+0

你可以发布'MyTable'的模式吗? – 2012-02-28 22:25:43

+0

我在上面发布架构 – tribal 2012-02-28 23:01:13

+0

为什么myTable.name是一个int(11)? – 2012-02-28 23:01:38

回答

3

问题似乎是您在myTable上的FK约束引用yet_another的ID,因此当您插入来自anotherTable的ID时,您将破坏此FK约束。机会有anotherTable中的ID不存在于yet_another表中。

了解这是在黑暗中拍摄的,基于您发布的抽象模式。如果你想要一个更加可靠的答案,我必须看到实际的模式。

+0

你明白了!另一个表中的某些ID不存在于另一个 – tribal 2012-02-29 01:05:55

+0

感谢大家帮忙 – tribal 2012-02-29 01:07:27

+0

啊哈很酷。希望这是一个简单的修复,祝你好运。 – 2012-02-29 01:07:50

0

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

只是一个猜测,但对于笑话我敢打赌,这是一个不在插入的列,它是一个不允许空值的外键。

+0

我在上面显示模式 – tribal 2012-02-28 23:00:48

相关问题