mysql中update语句返回什么

mysql中update语句的返回结果:1、当数据库的url中没有“useAffectedRows=true”参数时,返回匹配行数;2、当数据库的url中有“useAffectedRows=true”参数时,返回影响行数。 本教程操作环境:

mysql中update语句的返回结果:1、当数据库的url中没有“useAffectedRows=true”参数时,返回匹配行数;2、当数据库的url中有“useAffectedRows=true”参数时,返回影响行数。

本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。

mysql中update语句返回什么

update语句的结果到底是匹配行数?还是影响行数?

先说结果:如果数据库的url为:

若为:

综上:

如果url中没有 useAffectedRows=true 这个参数,则返回的是匹配行数。如果有,则返回的是影响行数。

如何让其返回值为受影响(changed)的记录数呢?

只需在mysql数据连接url参数加useAffectedRows=true即可

猜想

如果通过cmd操作mysql的update语句,屏幕上显示其实是这样的:

当我想这个问题的时候,第一反应有两个答案,1,在mysql服务器的返回结果中,进行判断,如果有这个设置为true,则返回Rows matched的值,如果为false,则返回Changed的值。2,在返回给查询语句的时候,进行这个值的选择。

证实

借用一个图来说明创建connection的整个过程:

(图摘自:https://blog.csdn.net/c929833623lvcha/article/details/44517245)

当我研究了一段时间之后,我发现,这两种想法都错了。具体来看:

我写了一个简单的jdbc查询:

1,建立Connection

根据源码,追踪,在mysql建立connection的时候,会将useAffectedRows=true这个参数设置为connection的属性。

继续:connect方法为:java.sql.Driver#connect,实现为:com.mysql.jdbc.NonRegisteringDriver#connect

useAffectedRows=true就是在com.mysql.jdbc.NonRegisteringDriver#parseURL方法中读取,并设置到 Properties props中去的。

再往下:com.mysql.jdbc.ConnectionImpl#getInstance获取connectiong的实例

这里是一个反射,args为 JDBC_4_CONNECTION_CTOR 用到的是JDBC的构造函数:

JDBC的构造函数,是: