【发布时间】:2019-02-13 23:09:43
【问题描述】:
我正在以两种方式执行具有 ON DUPLICATE KEY UPDATE v=v 的相同 sql 命令。
命令:INSERT INTO VS (v) VALUES ('someValue') ON DUPLICATE KEY UPDATE v=v;
两种方式给出不同的结果:
- 当使用原生 mysql 客户端并满足约束时,受影响的行数为 0。消息:
Query OK, 0 rows affected (0.14 sec) - 使用mysql jdbc驱动(
mysql-connector-java-8.0.11.jar),使用int res = ps.executeUpdate(...)执行同样的命令,结果为1。
从 java 文档中,结果是 the row count for SQL Data Manipulation Language (DML) statements,但没有更新,也没有进行插入。
另外,调用ps.getUpdateCount(),在执行后也返回1。
为什么 mysql java 驱动程序 1 中的结果是不应该更新的?谢谢。
为了清楚起见,表创建如下所示:
CREATE TABLE IF NOT EXISTS VS (v VARCHAR(128) NOT NULL, PRIMARY KEY (v))
【问题讨论】:
-
“没有更新”是什么意思?将列更新为它已有的值,仍然是更新。
-
@andreas - 在本机客户端上运行
ON DUPLICATE KEY UPDATE v=v时,结果消息为Query OK, 0 rows affected (0.14 sec),表示未执行更新,这是合乎逻辑的:将列更新到已经存在的相同值。
标签: java mysql jdbc on-duplicate-key