更新无符号 INT 失败,MySQL 上的值较低

Updating an unsigned INT fails with low values on MySQL

我有一个带有复合主键 (a, b) 的 table,我想在其中使用语法 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 语句?

如果是,是否有专门解决此问题或提供一些基本原理的文档?

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

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

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

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