多用户并发的问题

夜雪CH 2012-05-12 05:29:13
服务端运行着一个asp.net程序(没有使用多线程),多用户同时调用服务端程序操作数据表user。

user表
userID userAge
1 23
2 26

执行如下语句:
udpate user set userAge = userAge + 1 where userID=1

如果2个人同时执行这条语句,修改后的值是可能会是24吗?

...全文
127 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜雪CH 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
对于SQL Server来说,它肯定是25。

(即使你没有显式启用DBTransaction的话)SQL Server默认会对每一条sql语句自动启用transaction。而sql server的默认的事务隔离级别不低,它可以保证第一个会话读取记录时,第二个会话就不能读取,必须等到第一个会话释放transaction(此时usrAge已经是24了)之后才可能读取那些记录。

如果你使用……
[/Quote]

感谢前辈指教!
  • 打赏
  • 举报
回复
对于SQL Server来说,它肯定是25。

(即使你没有显式启用DBTransaction的话)SQL Server默认会对每一条sql语句自动启用transaction。而sql server的默认的事务隔离级别不低,它可以保证第一个会话读取记录时,第二个会话就不能读取,必须等到第一个会话释放transaction(此时usrAge已经是24了)之后才可能读取那些记录。

如果你使用其它关系数据库(例如Oracle的事务隔离级别就低一些),或者大多数NoSQL数据库(几乎都没有数据库事务处理功能),那么就不能保证,所以其结果完全可能是24。这时候就需要在编程中自己做一些处理。

实际上你想象一下传统上人工是如何处理这种冲突的?!只要是传统上人工方法能够处理,也就一定可以通过程序模拟其业务流程。不是什么都靠(关系)数据库的事务来处理这种情况的。

因为每秒钟成百上千的数据库事务并不适合现代互联网社会,数据库事务方法造成了使用关系数据库编程程序比使用NoSql程序慢了很多倍。所以只有银行等机构还保持这对传统关系数据库的绝对支持。而更多的应用都考虑以业务方式(而不是数据库方式)来处理这类冲突。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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