我有一个复合主键“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`)
答案 0 :(得分:3)
问题似乎是myTable
上的FK约束引用了yet_another
的ID,因此当您从anotherTable
插入ID时,您正在破坏此FK约束。 anotherTable
表中不存在yet_another
中的ID。
根据您发布的抽象模式,了解这是一个黑暗的镜头。如果你想要一个更加可靠的答案,我必须看到实际的架构。
答案 1 :(得分:0)
on duplicate key适用于主键。我认为你使用的是innodb。这在外键约束上失败了。表MyTable的哪些值是外键?请发布显示所有键和约束的表的create语句,以获得更详细的帮助。
只是一个猜测,但是对于笑话,我认为这是一个不在插入内的列,不允许空值的外键。