mysql update受影响的行数

update时受影响行数产生的问题

今天测试同学提出一个很诡异的bug,大致内容为在富文本输入框中频繁粘贴同一张图片的时候,会出现文件上传失败的问题,顺着链路,我发现是文件服务那边的锅,然而可以解决问题的人因为各种原因解决不了,我只好去拉代码自己去看了。发现文件上传接口在上传一个之前已经上传过的文件时,他会重新获取文件信息,然后把表中已存在的这条数据(文件信息)再重新修改一遍。发现其中有一个update_time,里面存的是时间戳。因为文件上传失败的问题只有在频繁上传同一个文件时才会出现,所以我觉得和这个sql有关系,其次,同一个文件,文件信息很少概率会发生变化,所以这个修改语句里面的字段只有update_time是变量。顺藤摸瓜发现了这个问题。

上面文字过多,懒的看的可以看这个图,一目了然

在这里插入图片描述

问题就出现在了当执行的update sql中,set后面的值,假如与数据库中的值一样,在默认情况下,受影响的行数为0!!!

这个注意点在mysql官方文档中已经指出了 这里是官方文档

内容如下:

For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect() when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WHERE clause.

翻译结果:(以下翻译插件使用的是我用go开发的命令行翻译工具,代码地址gitte
在这里插入图片描述

总结:

文件服务使用的ORM引擎是xorm,update时返回两个参数,第一个参数是返回受影响的行数,第二个参数是返回error。然而写这个代码的人,在判断sql是否执行成功时,是通过判断第一个参数是否不等于0进行判断的,因此才会引出今天这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值