mysql - 更新无符号 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 语句?
如果是,是否有一些文档专门解决了这个问题或提供了一些相关的理由?
解决方案
的INSERT ... ON DUPLICATE KEY UPDATE ...
形式INSERT
实际上是尝试插入操作。只有当插入遇到重复键时才会切换到UPDATE
.
有人可能认为查询规划器可以在不尝试插入的情况下以某种方式检测到重复键。但在所有情况下,它都没有,而且确实可能不能。
可以想象一种INSERT ... ON ERROR UPDATE ...
说法。但这种说法是不存在的。
这就解释了为什么数据类型转换错误INSERT
会导致整个查询失败。
推荐阅读
- mongodb - 除了 mongodump 和 mongorestore 迁移 mongoDB 数据库的方法?
- javascript - 无法使用淡入淡出关闭引导模式
- python - 使用詹金斯 API 时,属性“詹金斯”失败
- mongoose - Graphql 结果不使用猫鼬填充关联类型的结果
- python - 如何在某些方法中将字典作为参数传递,该方法将动态地从该方法中获取所有用户并执行所需的操作?
- azure - 远程服务器返回错误:(400) 错误请求。在 C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1
- unity3d - 在 UWP Windows 应用程序中加载 Unity WebGL 导出
- makefile - 如何在 Automake/Makefile.am 中执行 shell 命令?
- c# - ASP.NET-CORE 2.2 SignalR CORS
- ios - 在 Xcode 10 中对 Xcode 项目文件进行排序,以清理项目文件更改