对于INSERT ON ON DUPLICATE KEY UPDATE,Java MySQL executeUpdate()返回什么?

我花了大约3个小时检查互联网,我仍然找不到这个问题的答案。

java 文档和本教程说:

返回:(1)SQL数据操作语言(DML)语句的行计数或(2)0表示不返回任何内容的SQL语句

那意味着什么:

  • 插入1行没有重复 – > 1
  • 插入3行,不重复 – > 3
  • 插入包含所有重复项的3行,并且不更新值 – > 0
  • 插入3行,其中2个不重复,1个重复更新值 – > 3
  • 插入3行,其中2个不重复,1个重复, 不更新值 – > 2

或者至少这是我从文档中理解的。

但是,在StackOverflow上阅读其他问题让我感到困惑,因为它没有描述这种行为,而是描述了MySQL 文档所说的内容。

使用ON DUPLICATE KEY UPDATE时,如果将行作为新行插入,则每行的受影响行值为1;如果更新现有行,则为每行受影响的行值为2;如果将现有行设置为其当前值,则为0。

如果以前的行为是使用连接器的Java独有的,后者通过直接的MySQL操作,这仍然有意义,但正如我之前所说的,我发现答案表明它使用的是第一个或第二个相互矛盾。

这对我来说很重要,因为在我的代码中,我执行了一个插入,更新了许多条目,并通过比较返回数字来检查它是否成功执行,以及我的数组来修改计数。

MySQL参考手册说:

使用ON DUPLICATE KEY UPDATE时,如果将行作为新行插入,则每行的受影响行值为1;如果更新现有行,则每行受影响的行值为2。