我有一个带有复合主键(a,b)的表,我想用语法insert…在重复键更新时更新多个列。
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;
除了带有无符号值的列(列e)之外,这对所有列都非常有效。
假设等式e-1总是产生一个大于0小于100的数,那么查询执行是否可能独立于重复键检查而尝试insert语句?
如果是,是否有一些文档专门解决了这个问题或提供了一些基本原理?
1条答案
按热度按时间vatpfxk51#
这个
INSERT ... ON DUPLICATE KEY UPDATE ...
形式INSERT
实际尝试插入操作。只有当insert遇到复制键时,它才会切换到UPDATE
.人们可能认为查询规划器可以在不尝试插入的情况下检测到重复的键。但在所有情况下,它没有,而且实际上可能不可能。
我们可以想象
INSERT ... ON ERROR UPDATE ...
声明。但这种说法并不存在。这就解释了
INSERT
使整个查询失败。