|  |      1JoeJoeJoe PRO  1 看看 credits 的定义 | 
|  |      3Alucns OP MYSQL 版本 8.4.0 | 
|  |      4Alucns OP MYSQL 版本 8.4.5 | 
|      5hefish      65 天前  1 我猜想是 文本转数字损失精度的问题 | 
|  |      6realpg PRO  1 如果不是手写的代码 就换个靠谱点的 orm 现在高版本 MYSQL 的默认开启的严格模式可能都没法运行 | 
|      8jorneyr      65 天前  1 也是 MySQL 8 ,遇到过,同一个事务里多次更新同一条记录的同一个 int 字段报错 (延时一下就不报错了)。 | 
|      9phpfpm      65 天前  1 最佳实践是别用 mysql 做算术题,你就当他是 kv 你 update 一个主键就行。 先查出来,加个锁,开个事务,提交数据 mysql 的 cpu 很值钱,你程序的 cpu 不值钱 否则你高频做整个事情 mysql 内部自己有悲观锁什么的不整死你才怪 | 
|      10clarkethan      65 天前 有没有查过日志,引起警告的语句具体是什么,有没有可能你在有些语句里面,传入了不符合数据库字段需要的值,比如   1087.770 | 
|  |      11Alucns OP 感谢大家回复,我测试看看,谢谢! | 
|  |      12Alucns OP @clarkethan 告警就是这个 Data truncated for column 'credits' at row 1 | 
|      13lovelylain      65 天前 via Android credits 没有 not null default ,update 前值为 null ? | 
|  |      14rekulas      65 天前 不是很明显的溢出问题么? 你先改为 decimal(16,6) 测测 | 
|  |      15xiangyuecn      65 天前 @phpfpm #9 查出来再加锁???😂 事务是这么玩的嘛 干脆不要事务得了 | 
|      17phpfpm      65 天前 @xiangyuecn 第一遍查总得大概齐看下有没有余额吧,完成一些不需要写表的业务逻辑。 至于在事务里面要不要再次查或者 select for update 随你 (我就这么一说不要认真当伪代码了 hhh | 
|  |      19dajj      65 天前 Data truncated for column 'credits' at row 1   你设置的值超过字段精度了 | 
|  |      20Alucns OP UPDATE `api_wallet` SET `credits`=`credits`+'1087.77', `cost`=`cost`+'151.23' WHERE `uid`='12'; 估计是这个值'1087.77' 被转换成 1087.769999999 | 
|  |      21vone      64 天前 MySQL 好像在事务未提交前写入的数据,如果你再读取的话好像不一定保证是 decimal(16,2)。 | 
|      22ca2oh4      63 天前 说了金额不要存小数 |