当前位置:编程学习 > C#/ASP.NET >>

怎样防止 多个人在同一时刻对同一条记录进行修改?

怎样防止 多个人在同一时刻对同一条记录进行修改?

比如说,当多个人参与购物时,假设所购物品只剩一件,
那么怎么防止两个人或两个以上的人同时订购此物而导致系统运行不正常呢?

能否给个例子研究一下?

理论是什么? 谢谢!!! --------------------编程问答-------------------- 互斥锁:Mutex --------------------编程问答-------------------- 具体能给个代码吗?谢谢 --------------------编程问答-------------------- 这是数据库中的并发访问问题。

在数据“提交”时确认(数据库中查找)一下。
如果商品库存大于0,回显用户购物成功;
否则,回显用户所购物品业已售完,欢迎再次再来。 --------------------编程问答-------------------- 用锁 --------------------编程问答-------------------- aplication.lock加锁 --------------------编程问答-------------------- lock一下就可以了  --------------------编程问答-------------------- 不能用锁,因为在订购操作前你不知道到底是不是还有,只能在订购保存时检查还有没有货,因为你保存时必须要去减少库存,所以至少要操作两张表,一定有一个事务存在,在保存库存为-1时回滚就是了

即使是同时订购,数据库也不可能同时去提交的,总有先后的 --------------------编程问答--------------------
引用 3 楼 BlueskyWide 的回复:
这是数据库中的并发访问问题。 

在数据“提交”时确认(数据库中查找)一下。 
如果商品库存大于0,回显用户购物成功; 
否则,回显用户所购物品业已售完,欢迎再次再来。


是的。用户操作前“看到的”屏幕显示状态不能算数,你的程序在处理提交确认时应该再次访问一次数据库判断是否真的够卖,如果数据库最新状态不够卖这个商品,“回显用户所购物品业已售完,欢迎再次再来”。 --------------------编程问答--------------------
引用 7 楼 natfit 的回复:
不能用锁,因为在订购操作前你不知道到底是不是还有,只能在订购保存时检查还有没有货,因为你保存时必须要去减少库存,所以至少要操作两张表,一定有一个事务存在,在保存库存为-1时回滚就是了 

即使是同时订购,数据库也不可能同时去提交的,总有先后的


非常同意。

很奇怪的“锁”概念,根本没有可操作性。结论是“不能用锁”。

难道说当一个人看这个页面时,所有其它的人就都不能修改数据库?即使如此,当一个人看页面的时候又如何去为数据库加锁,直到这个人不看这个页面了(转到其它页面或者关闭浏览器)到数据库解锁?没有可操作性,不是真正想好了或者实际做过实现方法的。 --------------------编程问答-------------------- SQL Server对任何客户端提交的命令都是默认地自动启用事务的,在事务中它会自动加锁,也就是说类似“数据库也不可能同时去提交的,总有先后的”,或者准确地说就算是同时提交到数据库,也会因为它们操作互斥的记录而使得两个事务被编排为前后次序的。所以,技术上我们使用的工具本来就是比较高级的,默认地解决了事务问题,楼主的问题不应该从技术上看而是应该从业务上看“如何避免负库存”的问题。 --------------------编程问答-------------------- 以lz的例子而言,是不能用锁的...

但并不是说“锁”概念很奇怪,提交确认时告知用户在某些场景反而是很奇怪的体验...

例如某个公文审批的过程,如果不加锁A领导审批时弹出一个类似“不好意思,此公文已被B领导审批通过”的提示...我想A领导的感觉不会很好...

再例如某种票据补录的过程,用户辛辛苦苦填了一大堆数据之后给他来个“此记录已处理完毕”的提示用户十有八九会抓狂...

所以不能一概而论,还是要看业务需求... --------------------编程问答-------------------- 非常感谢,楼上几位的解释,小弟略有清晰了很多的感觉~~~ --------------------编程问答-------------------- 其实没有这么麻烦,直接在存货里面有人加入购物车就货物存量-1,如果下了订单就没有什么,如果取消的华再把存货量+1就行了,最好不要使用lock,那样的操作是对同一件货物进行修改时使用的。购物就没有必要 --------------------编程问答-------------------- 如果只是针对购物的商品,可以,谁先下订单,商品就归谁;如果同时还有人在下订单,会提示他,商品短缺!这个不会对系统造成什么影响的! --------------------编程问答-------------------- 把你操作数据库的方法 lock{} --------------------编程问答-------------------- 学习了。。。 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- Transaction事务并发
Lock和Unlock
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,