gpt4 book ai didi

MySQL - 如何计算批量插入重复键更新查询中的插入和更新?

转载 作者:行者123 更新时间:2023-11-29 01:39:04 29 4
gpt4 key购买 nike

我有一个 MySQL 查询,它执行批处理 INSERT 并使用 ON DUPLICATE KEY UPDATE 更新行,以防存在唯一键重复。

INSERT INTO table1
(col1,col2,col3)
VALUES
(val1,val2,val3),
(val4,val5,val6),
(val7,val8,val9),
...
(valn,valx,valz)
ON DUPLICATE KEY UPDATE
col3 = VALUES(col3);

换句话说,除非存在重复的唯一键,否则将插入新行,在这种情况下,col3 会更新。

查询完成后,我想知道有多少行被插入以及有多少行被更新。这可能吗?

最佳答案

不,没有明确的方法可以从 rows_affected 计数中判断出来。在一些极端情况下,我们可以判断...如果 rows_affected 恰好是我们尝试插入的行数的两倍,我们就知道它们都是更新。如果 rows_affected 计数为零,我们就知道没有插入任何行。如果 rows_affected 计数为一,我们就知道插入了一行。但除此之外,还有很多排列。

可以制作BEFORE INSERTBEFORE UPDATE 触发器来增加用户定义的变量。如果我们在 INSERT ... ON DUPLICATE KEY UPDATE 语句之前立即初始化用户定义的变量,我们可以结合使用这些变量来确定我们尝试插入了多少行,以及其中有多少行导致重复键异常。 (MySQL 不会为没有实际更新行的更新操作增加 rows_affected。)


编辑

如果您保证 UPDATE 操作将导致对行的实际更改...如果您要更改每一行上至少一列的值,对于更改的每一行...并且如果您计算您尝试插入的实际行数,然后您可以从 rows_affected 计数确定插入了多少行,以及更新了多少行。

INSERT ... ON DUPLICATE KEY 可以导致同一行被插入和更新,和/或导致同一行被更新多次。

您是想要计算“更新”操作的数量,包括对同一行的更新,还是想要计算表中已更新的行数?

关于MySQL - 如何计算批量插入重复键更新查询中的插入和更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30881172/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com