C#/.net/sql高手进!什么情况下需要注意和处理数据库的并发性?
我一般使用ado.net做一些简单的数据库应用,由于技术还没深入以及用户要求也不是很高,并没有关注过并发性,更不知道如何处理。比如说两个客户端对同一个表同时进行查询和更新...
我一般使用ado.net做一些简单的数据库应用,由于技术还没深入以及用户要求也不是很高,并没有关注过并发性,更不知道如何处理。比如说两个客户端对同一个表同时进行查询和更新操作吧,我觉得是sqlserver自己搞定的,似乎并没有什么问题发生。
请问一下什么情况下需要注意并处理呢?请结合你自己的经验谈,不要复制粘贴! 展开
请问一下什么情况下需要注意并处理呢?请结合你自己的经验谈,不要复制粘贴! 展开
4个回答
展开全部
下面这个例子比较常见。
1、甲售票员读出某航班的机票张数余额A,设A=16;
2、乙售票员读出同一航班的机票张数余额A,也是16;
3、甲售票员卖出一张机票,修改机票张数余额A=A-1=15,把A写回数据库;
4、乙售票员也卖出一张机票,修改机票张数余额A=A-1=15,把A写回数据库。
结果明明卖出两张机票,数据库中机票余额只减少1。
1、甲售票员读出某航班的机票张数余额A,设A=16;
2、乙售票员读出同一航班的机票张数余额A,也是16;
3、甲售票员卖出一张机票,修改机票张数余额A=A-1=15,把A写回数据库;
4、乙售票员也卖出一张机票,修改机票张数余额A=A-1=15,把A写回数据库。
结果明明卖出两张机票,数据库中机票余额只减少1。
更多追问追答
追答
没你所想的那么简单,从读出余额到票售出完成,中间是有一段时间的,并不是即时的从数据库中减掉,当然,这仅仅只是一个示例,实的情况要比这个复杂的多,去查一下并发操作带来的数据库不一致性的四类: 丢失或覆盖更新、脏读、不可重复读和幻像读
追问
那你就重新举个例子行不行,有说服力一点的。刚刚你说的那个例子,假如用了存储过程来实现的话我看就可以解决吧。查询有票就调用存储过程减1,这个是立即发生的。如果当时数量就为零了,则返回错误,并不存在什么问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在并发高的情况下。
你要考虑事务了。
如果不启用事务的话,没办法保证数据的一致性。
默认数据是不启用事务操作的。
如果你不启用事务来控制你的数据更新就有可能出现
数据不对称的现象。
尤其是大并发下这样的问题极其可能发生。
你要考虑事务了。
如果不启用事务的话,没办法保证数据的一致性。
默认数据是不启用事务操作的。
如果你不启用事务来控制你的数据更新就有可能出现
数据不对称的现象。
尤其是大并发下这样的问题极其可能发生。
追问
这个还有点靠谱,你的意思就是说加锁什么的是不是和事务紧密联系的?
如果不用事务是否就谈不上加锁?
追答
是的。
.net如果我没有记错的话。
支持2种事务。
一种是针对你的.net程序进程,、
另一种就是针对数据这块。
如果你的数据严谨性要求高,你可以可以选择数据库这块的。
针对事务锁这块有不同的锁情况。
你可以按照你的实际需求来调整。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的例子:就是你拿着的东西被别人偷偷拿走了,而你却不知道。
1、甲查询A表的数据
2、乙删除A表的数据
3、甲查和乙删同时进行的时候,数据会出现怎样的结果呢?
1、甲查询A表的数据
2、乙删除A表的数据
3、甲查和乙删同时进行的时候,数据会出现怎样的结果呢?
更多追问追答
追问
怎么可能是同时?命令达到sqlserver的时间肯定有先后!再说了,先不说我们的程序,就说sqlserver,在两个客户端同时查和删会出现奔溃的现象么?大不了就查不出数据,刷新就ok了。
追答
是的,但是你想的太简单了。你只想到这一点,数据的遗漏、丢失、或缺等等情况都是会出现的,既然如此是不是跟你预期的结果不一致了呢?刷新就OK了,用户会知道这个还要再刷新一次么?这个时候你用上并发性的处理是不是就更好了呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-30
展开全部
给你举个例子,如果a用户打开connection连接,然后进行操作,等操作完成后,关闭连接,在a操作的过程中,b用户也进行了操作,但是没有完事,那么b用户就会受到影响。
追问
受到什么影响?难道说sqlserver没有处理这种问题?最多就是在b那边报个错吧,b重新操作就行了。会有其他什么影响?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询