php程序如何避免用户同时访问某连接造成的数据错误

比如,数据库里面有个库存还有1个,两个用户同时访问一个连接来兑换这个商品,验证库存的时候都是符合要求的,但是兑换之后发现多兑换出去一个,如何避免这样的问题... 比如,数据库里面有个库存还有1个,两个用户同时访问一个连接来兑换这个商品,验证库存的时候都是符合要求的,但是兑换之后发现多兑换出去一个,如何避免这样的问题 展开
 我来答
周阳002
2013-12-13 · 知道合伙人互联网行家
周阳002
知道合伙人互联网行家
采纳数:45 获赞数:58
某外贸企业技术工程师

向TA提问 私信TA
展开全部
楼主你可以考虑MYSQL的事务处理功能。
一般来说,事务是必须满足4个条件(ACID)
原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
说白了就是某一个用户进行兑换操作的时候,就把对应的数据表锁定死,只有等操作完成后才解锁。
追问
用锁的话,会不会出现这种情况,比如我搞活动秒杀这个东西,在同一时间大量用户访问,因为加锁的话是一个处理完再处理另外一个,会不会所有的用户都需要排队,影响了处理速度?
追答
这个很简单的,只要你把同一时间的用户提交session封装成一个识别操作就行了,就像钱500名秒杀,规定在这一秒前500名session封装成一个整体,然后在进行操作。
bxbyg
2013-12-13 · TA获得超过326个赞
知道小有建树答主
回答量:471
采纳率:0%
帮助的人:453万
展开全部
过程思路应该是这样的:
因为数据库中库存为1,所以两个用户看到的可兑换都是1。
这时其中一个用户点击了兑换,那么PHP程序接收到了表单的提交,开始去数据库验证这个可兑换数量,发现是1,那么就将数据库中库存量减1,同时提示用户兑换成功。
之后第二个用户又点击了兑换,那么PHP程序又接收到了表单的提交,开始去数据库验证这个可兑换数量,发现已经是0了,那么返回一条兑换失败的信息给用户就可以了。
追问
你这个流程还是同时执行的吗,是两个用户同时进行兑换的操作,两个人看到的库存都是1,然后A兑换的处理还没结束,库存还未变成0 ,就进行B的兑换操作了,楼下说的加锁的思路还是比较靠谱的
追答
这就要看你的具体需求了,你要做的是什么,电商网站?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kur116
2013-12-13 · 超过30用户采纳过TA的回答
知道答主
回答量:201
采纳率:50%
帮助的人:72.1万
展开全部
行锁 用事务处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式