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的构造函数,是: