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 上发布的第一个问题,所以希望我遵循了协议!
我有一个有点长的 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 上发布的第一个问题,所以希望我遵循了协议!