对于频繁变动的数据,如余额,要怎么处理才能保证它的正确性.

szuzsq 2017-06-07 10:15:44
例如:我的账户,有个double类型的余额字段..
我账户有买和卖,那对于余额,就是增加和减少.
我余额为400元,卖出一件商品100元,那余额为500元.
买进一件商品200元,那余额为300元.
-----------------------------------------------------------
问题是网站是相当于多线程的,可能多人同时在访问.
2个人同时在买我的东西.我余额为300时,本来一个人,一个人排排队来结算.
那就是
第1人:300+100
第2人:400+100
-----------------------------------------------------------
但如果是同时的话,那会不会变成
第1人:300+100
第2人:300+100
结果我的余额不见了100块.
...全文
273 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_francis 2020-09-18
  • 打赏
  • 举报
回复
update 语句有加减 计算 不会有性能影响吗?
szuzsq 2017-06-09
  • 打赏
  • 举报
回复
引用 2 楼 zjcxc 的回复:
update 是排它操作,不会因为并发导致楼主说的情况 除非你是自己 select 出余额,+上新值后更新回去,直接的 update tb set 余额=余额+100 这样的操作是没有问题的
这个非常有用. 之前买东西,我做法是,select出来余额,然后看看余额够不够. 够了的话就再update回去,总觉得有问题. 那现在做法是 直接的 update tb set 余额=余额+100 然后余额够不够就放在where里面咯?
zjcxc 2017-06-09
  • 打赏
  • 举报
回复
对,直接在 update 的 where 条件判断就行了,不需要其他特别的处理
zjcxc 2017-06-07
  • 打赏
  • 举报
回复
update 是排它操作,不会因为并发导致楼主说的情况 除非你是自己 select 出余额,+上新值后更新回去,直接的 update tb set 余额=余额+100 这样的操作是没有问题的
ACMAIN_CHM 2017-06-07
  • 打赏
  • 举报
回复
只能考虑使用事务和锁了。 当一个人修改的时候,禁止其它人个性。 用户点提交时,开启事务,重新SELECT然后UPDATE。

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧