MySQL⾃减更新-int型字段和decimal类型字段区别
在平常使⽤MySQL保存⾦额字段的时候⼀般使⽤decimal数据类型
在⽤户充值或者扣款的时候为了防⽌并发写⼊的问题,⼀般使⽤⾃增或⾃减更新
update table set money = money - 100 where id = 1;
当字段设置⽆符号unsigned的时候使⽤上⾯的sql更新,存在数据不准确的问题
例如
money字段当前值是50,执⾏上⾯⾃减100的sql结果如下:
decimal是整数数据类型money字段的值变成0.00,sql返回修改记录⾏数是1。
当字段值是0的时候执⾏上⾯的⾃减sql,字段值不变,sql返回修改记录条数是0
解决办法,使⽤int⽆符号类型代替decimal数据类型
在修改成int类型的字段以后使⽤⾃减sql,当结果⼩于零的时候会抛出数据库错误BIGINT UNSIGNED value is out of range 能有效的防⽌数据错误的问题
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论