首页 > 解决方案 > 更新无符号 INT 失败,MySQL 上的值较低

问题描述

我有一个包含复合主键 (a, b) 的表,我想使用 INSERT...ON DUPLICATE KEY UPDATE 语法更新多个列。

INSERT INTO table_a (a, b, c, d, e) VALUES (1533571200, 1, 7, 1, -1) 
ON DUPLICATE KEY UPDATE  c = c + 7, d = d + 1, e = e - 1;

除了具有 UNSIGNED 值的列(列 e)之外,这对所有列都非常有效。

假设等式 e - 1 总是产生大于 0 且小于 100 的数字,查询执行是否有可能独立于 DUPLICATE KEY 检查尝试 INSERT 语句?

如果是,是否有一些文档专门解决了这个问题或提供了一些相关的理由?

标签: mysqlunsigned-integeron-duplicate-key

解决方案


INSERT ... ON DUPLICATE KEY UPDATE ...形式INSERT实际上是尝试插入操作。只有当插入遇到重复键时才会切换到UPDATE.

有人可能认为查询规划器可以在不尝试插入的情况下以某种方式检测到重复键。但在所有情况下,它都没有,而且确实可能​​不能。

可以想象一种INSERT ... ON ERROR UPDATE ...说法。但这种说法是不存在的。

这就解释了为什么数据类型转换错误INSERT会导致整个查询失败。


推荐阅读