mysql – ON DUPLICATE KEY UPDATE导致外键约束错误

我搜索了*,但我找不到我的具体问题的答案.

最近,我已成为使用“INSERT INTO … ON DUPLICATE KEY UPDATE”更新记录列表的忠实粉丝.但是,我遇到以下问题的问题:

INSERT INTO itens (prod_id, qtd) VALUES (410, 1),(442, -1)
ON DUPLICATE KEY UPDATE qtd = qtd + VALUES(qtd)

这导致错误:“无法添加或更新子行:外键约束失败.”

这是该表的结构. “carrinho_id”是一把外键.我很困惑的事实是我没有尝试用外键做任何事情.我只是想更新数量.

CREATE TABLE IF NOT EXISTS `itens` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `carrinho_id` int(10) unsigned NOT NULL DEFAULT '1',
 `prod_id` int(10) unsigned NOT NULL DEFAULT '1',
 `qtd` int(12) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 KEY `carrinho_id` (`carrinho_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=229 ;

解决方法:

我找到了自己问题的答案,并认为在类似的情况下它可能会帮助其他人.

问题是尝试使用插入更新,您必须考虑插入的所有约束.任何未定义的值都必须具有默认值.我有一个’carrinho_id’的默认值,但它是一个已被删除的记录,因此我得到了错误.

原来,这不是我唯一的问题.为了使MySql检测到重复,您必须指定一个只能是唯一的行.由于我省略了’id’,它只是添加了一个新行,从零中减去数量的值.同样重要的是要注意,只有在列无符号时才能以这种方式减去数量.

最后,我成功指定了主键和外键:

INSERT INTO itens (id, carrinho_id, prod_id, qtd) VALUES (225, 75, 410, 1),(226, 75, 442, -1)
ON DUPLICATE KEY UPDATE qtd = qtd + VALUES(qtd)
上一篇:Struts2中实现随机验证码


下一篇:c – 删除数组中的重复字符串