我有一张桌子......
CREATE TABLE `pricing` (
`product_id` int(11) NOT NULL,
`seller_id` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`price` float DEFAULT NULL,
`ship` float DEFAULT NULL,
PRIMARY KEY (`product_id`),
KEY `seller_id` (`seller_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
当我尝试运行INSERT INTO ... ON DUPLICATE KEY UPDATE
时,如果我尝试编辑seller_id
,我会收到完整性约束违规行为:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '4984-2014-11-23 10:05:20' for key 'PRIMARY'.
SQL查询是:
INSERT INTO pricing
(product_id, price, ship, seller_id)
VALUES (:product_id, :price, :ship, :seller_id)
ON DUPLICATE KEY UPDATE
seller_id = :seller_id
这是期望的行为吗?有没有办法避免它?我们现在正在使用REPLACE
,但我很好奇我是否做错了。我不是要更新主键,而是另一个常规的非唯一键 - 约束属于主键。
这里的进程是什么?
编辑:我跑了SQL Fiddle,它运作正常。为什么它会导致我的机器出错? :/
答案 0 :(得分:2)
您使用该表列出的查询对我来说很好,因此错误不在那里。
仔细查看错误后,我会注意到以下内容:
重复录入' 4984-2014-11-23 10:05:20'关键' PRIMARY'。
这个PRIMARY键看起来很像一个数字,后跟一个日期时间,很可能是。很可能在这个表的mysql数据库上有一个触发器。
(基于ID +日期我可以自动跟踪价格变化吗?)
另一种选择是存在外键问题的可能性,尽管基于不太可能的错误。
尝试在表的数据库中运行以下mysql语句,并查看结果。
SHOW TRIGGERS