【发布时间】:2015-06-24 12:07:22
【问题描述】:
我在网上查了大约 3 个小时,仍然找不到这个问题的答案。
java documentation 和这个tutorial 说:
返回:(1) SQL 数据操作语言的行数 (DML) 语句或 (2) 0 用于不返回任何内容的 SQL 语句
所以它的意思是:
- 插入没有重复的 1 行 -> 1
- 插入不重复的 3 行 -> 3
- 插入 3 行,所有重复项且没有更新值 -> 0
- 插入 3 行,其中 2 个无重复项和 1 个重复项,更新一个值 -> 3
- 插入 3 行,其中 2 个不重复和 1 个重复不更新值 -> 2
或者至少这是我从文档中了解到的。
但是,阅读 StackOverflow 上的其他问题 here 和 here 让我再次感到困惑,因为它没有描述这种行为,而是描述了 MySQL documentation 所说的内容
如果使用 ON DUPLICATE KEY UPDATE,每行的受影响行值为 1,如果 该行作为新行插入,如果现有行被更新,则为 2,并且 如果将现有行设置为其当前值,则为 0。
如果前一种行为是 Java 独有的使用连接器,而后一种行为是通过直接 MySQL 操作,这仍然有意义,但正如我之前所说,我发现答案说它使用第一个或第二个相互矛盾的.
这对我来说很重要,因为在我的代码中,我在更新许多条目时执行插入操作,并通过比较返回数和我的数组来检查它是否成功执行以修改计数。
【问题讨论】:
-
编写代码来测试一下,你会得到答案。
-
compensateOnDuplicateKeyUpdateCounts描述的配置属性 here 也可能会影响您看到的结果。