MySQL 的更新字段插入 ... 在重复键更新时

Update fields for MySQL Insert ... On Duplicate Key Update

我有一个有点长的 MySQL ETL 语句,我将 32 列数据插入 table。此 ETL 语句还利用 UNION 作为派生 table.

我的代码与此类似,在MySQL参考手册中有定义:

INSERT INTO t1 (a, b, ... "32 columns total")
SELECT * FROM
  (SELECT a, b, ... FROM t2
        LEFT JOIN t3 on t2.id = t3.id
   UNION
   SELECT a, b, ... FROM t2
        RIGHT JOIN t3 on t2.id = t3.id
  ) AS dt
**ON DUPLICATE KEY UPDATE b = b + c**;

问题:使用 'On Duplicate Key Update' 时,我将重复的行添加到目标 table。我怀疑我没有正确编写最后一行代码。

我的问题:我是否需要将 table 的 32 列中的 ALL 添加到此 'On Duplicate Key Update'声明?或者 ONLY 列的数据可能会改变?

提前致谢,我发现 MySQL 参考手册的这一部分令人困惑,而且它们的示例比我的真实场景简单得多。我已经搜索过,但找不到与我的情况相似的答案或示例。

谢谢@Barmar,感谢您的对话!
事实证明,因为我试图避免这个错误:https://bugs.mysql.com/bug.php?id=58637 我欺骗自己创建了一个没有按预期工作的主键。 ;) 我创建了一个复合主索引,它由一个(自动递增数字,r_id,t_id)组成。由于自动递增数字不是我插入的一部分,因此它允许行重复。 我更改了 table 索引,因此主索引仍然是自动递增的数字,并且有一个新的唯一索引,其中包括(r_id 和 t_id)。这似乎现在有效。

我仍然对我原来的问题的一部分感到好奇:创建 'on duplicate key update' 语句时......我 真的 需要包含每个可能更改的字段吗?换句话说...语句 only 是否评估此语句中的字段以进行更改?

再次感谢@Barmar!

这是我在 Whosebug 上发布的第一个问题,所以希望我遵循了协议!