PHP-MYSQL如何实现买东西扣钱流程(细节有关问题一大堆)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-MYSQL如何实现买东西扣钱流程(细节有关问题一大堆),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1591字,纯文字阅读大概需要3分钟。
内容图文
PHP-MYSQL怎么实现买东西扣钱流程(细节问题一大堆)?假设用户花费金钱余额兑换1个‘糖’这种虚拟商品,金钱余额和用户拥有‘糖’的个数分别记录在不同的表上,那么我们要做的是,扣除用户金钱的同时,在用户的虚拟物品表中‘糖’的数量+1。假设任何用户'糖'数上限为99
先说下目前小弟的思路:
*先select查询用户账上的金钱余额(SQL语句1)
*比较金钱余额和1个‘糖’价格,如果余额足够那么继续(PHP逻辑实现)
*事务开始
*update金钱余额,令其减去1个‘糖’的价格。这里出现问题A:是直接update成扣除‘糖’价之后的余额(即PHP先算出余额),还是让MYSQL做字段减法?(SQL语句2)
*select用户‘糖’数(SQL语句3)
*如果上一条select无结果,那么insert一条该用户'糖'的记录,数量为此次购买的'糖'数;如果已有该用户的‘糖’记录,那么update'糖'数,令其加上1。这里出现问题B:因为单个用户的'糖'数上限为99,我需要用PHP逻辑判断‘糖’数+1以后是否超过上限99,然而如果在SQL语句1和3中没有‘for update’锁表,那么结合问题A,一旦该用户同时发出2个买‘糖’请求,就可能出现实际上‘糖’数超过了上限99(比如达到了100)
*最后事务提交
所以最终的问题还有2个:
C:类似这种消耗一种资源,换取另一种资源的逻辑,在select某个资源数的时候都一定要‘select...for update’加锁吗?(不先select又无法进行钱是否足够或者'糖'是否数量超限的逻辑判断,select后再update又怕select到的数据中途被改)
D:上述流程有办法简化吗?
或者有没有关于这种问题的详尽的文章,如能分享不胜感激。
------解决思路----------------------
这东西要保证万无一失就必须得用事务, 要么失败回滚, 在么成功提交
------解决思路----------------------
必须使用事务处理。
------解决思路----------------------
先套上事务,然后select for update取出当前库存,如果足够就插入一条记录到日志表,然后update库存完成扣减,最后释放掉事务。
内容总结
以上是互联网集市为您收集整理的PHP-MYSQL如何实现买东西扣钱流程(细节有关问题一大堆)全部内容,希望文章能够帮你解决PHP-MYSQL如何实现买东西扣钱流程(细节有关问题一大堆)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。