一直认为mysql更新操作会返回实际修改数量(affected rows), 但是最近在mybatis项目中发现其返回的是匹配数量(matched rows). 不管什么orm框架其底层都是使用mysql官方提供的驱动jar包实现的与数据库的通讯, 所以我们要研究下关于驱动的文档.
mysql client update(官方客户端返回信息很全,既有matched rows又有affected rows, 这也是之前导致我认为返回affected rows的原因.):
datagrip update(基于java驱动实现的GUI客户端, 返回matched rows):
mysql client for java code(基于java驱动实现的客户端, 返回matched rows):
通过上面的例子分析发现: 针对更新操作,官方命令行客户端返回信息很详细(matched rows与affected rows都会返回),基于官方提供的java驱动实现的客户端更新操作只返回matched rows. 毕竟实现机制不一样, 下面我们找下官方文档证明下.
java api(dml return rows, ddl return 0, 规范没有详细说明执行返回的rows到底是matched rows还是affected rows, 所以各数据库厂商提供的驱动可以自由返回, 有可能mysql返回matched rows而oracle返回affected rows.)
mysql connector for java api (详细描述返回matched rows, 直接原因在这里.)
能不能使mysql client for java返回affected rows呢? 答案是可以的(建立连接时指定useAffectedRows=true就可以了,但是要注意jdbc版本兼容问题、ON DUPLICATE KEY UPDATE问题).
经过以上分析, java api规范没有指定更新操作具体返回matched rows还是affected rows, 这个各数据库厂商可以自由返回. mysql驱动实现明确指定默认返回matched rows, 但是给我们提供的配置参数useAffectedRows.
实际开发中是返回matched rows好呢? 还是affected rows好呢? 我感觉还是返回affected rows比较好, 毕竟有的业务场景需要在首次更新时触发、批量更新时需要知道具体更新的数量.
相关推荐
然而,当UPDATE语句更新的字段与原数据相同,即没有实际改变任何值时,`mysql_affected_rows()`函数可能会返回0,这在某些情况下可能会被视为异常或错误。 为了解决这个问题,我们可以参考bdobrica at gmail dot ...
mysql> update user set password=password('root123') where user='root'; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 ``` 第六步:刷新权限表 在修改密码后,我们需要刷新...
mysql> UPDATE account SET balance = balance + 10 WHERE id = 2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> COMMIT; Query OK, 0 rows affected (0.00 sec) ``` 在这...
例如:`MERGE INTO t_join_situation a USING (SELECT * FROM t_people_info) b ON (a.people_number=b.people_number) WHEN MATCHED THEN UPDATE SET a.join_state=b.join_state WHEN NOT MATCHED THEN INSERT ...
mysql> update user set password = password("wppassword") where User = 'wpuser'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> GRANT ALL PRIVILEGES ON wordpress...
WHEN MATCHED THEN UPDATE SET a.customer_type = 'CRM', b.customer_type; ``` 使用merge语句可以避免编写复杂的逻辑判断,并且可以提高处理效率,特别适用于需要根据条件合并多表数据的场景。 4. 快速游标...
simulink matched filter function
Rows matched: 2 Changed: 0 Warnings: 0 ``` 这表明密码更新成功,但并未真正生效,还需要执行下一步操作。 #### 步骤四:刷新权限表 在mysql提示符下执行`FLUSH PRIVILEGES;`命令,以确保新的权限设置生效: `...
Co-operative spectrum sensing for matched filter detection
在雷达信号处理领域,"matched_filter_脉冲压缩_matched_快速卷积_cityfce_雷达_"这一标题涉及到的核心技术是脉冲压缩(Pulse Compression)和匹配滤波器(Matched Filter),以及快速卷积算法在其中的应用。...
try to search for the matched name in your university list. If there is a match (or no match) found, print a corresponding message. (Hint: one of solutions is to use java.util.regex API 正则表达式)
NXP 的13.56MHZ天线设计指南,Directly matched antenna
Rows matched: 1 Changed: 1 Warnings: 0 ``` 这里将 `rs_dept` 表中 `dept_id` 为 1 的记录中的 `dept_code` 字段更新为 "Hello"。 #### 十、查询数据(Select Data) 使用 `SELECT` 命令可以从表中检索数据。 ...
### Update语句优化 在数据库操作中,`UPDATE`语句是用于修改现有记录的关键工具之一。对于大型数据库系统来说,优化`UPDATE`语句能够显著提升数据处理速度和效率,减少资源消耗,提高整体性能。本文将通过分析提供...
纯英文文献,讲述了在数字接收机中的匹配滤波和定时同步,在数字通信系统中,要获取信号,需要在接收端输出有意义的数据之前,对多个信号处理算法进行收敛。这些算法本质上是自适应的,在收敛之前需要处理多个接收...
$route.fullPath 1 路由是:/path/:type真正路径是:/path/list 2 path匹配路径: /path/list 3 fullPath匹配路由: /path/:type 路由元信息 .meta const router = new VueRouter({ routes: [ { ...
Matched filter for denoising