ON DUPLICATE KEY UPDATE - 获取"完整性约束违规"

时间:2014-11-23 16:20:29

标签: mysql

我有一张桌子......

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,它运作正常。为什么它会导致我的机器出错? :/

1 个答案:

答案 0 :(得分:2)

您使用该表列出的查询对我来说很好,因此错误不在那里。

仔细查看错误后,我会注意到以下内容:

  

重复录入' 4984-2014-11-23 10:05:20'关键' PRIMARY'。

这个PRIMARY键看起来很像一个数字,后跟一个日期时间,很可能是。很可能在这个表的mysql数据库上有一个触发器。

(基于ID +日期我可以自动跟踪价格变化吗?)

另一种选择是存在外键问题的可能性,尽管基于不太可能的错误。

尝试在表的数据库中运行以下mysql语句,并查看结果。

SHOW TRIGGERS