gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:59:29 27 4
gpt4 key购买 nike

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

最近我非常喜欢用列表更新记录,使用“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)

关于mysql - ON DUPLICATE KEY UPDATE 导致外键约束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13212272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com