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