首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脏读问题,如何在sql server 2005中解决

脏读问题,如何在sql server 2005中解决
EN

Stack Overflow用户
提问于 2010-11-06 23:07:38
回答 1查看 1.2K关注 0票数 1

如何解决sql server中的以下脏读问题。

有一份客户发票报告,该报告在下午1点运行,之后所有发票都会发送给相应的客户进行付款。假设其中一个客户需要支付1000美元。客户在凌晨1:00支付1000美元,同时运行报告。实际上,客户没有资金悬而未决,但仍然开具了发票。

另外,对于不可重复的读取,如何解决这个问题

例如,客户想要预订航班,因此旅行社会检查航班是否可用。旅行社找到一个座位,然后去预订座位。当旅行社预订座位时,另一家旅行社预订座位。当这个旅行社去更新记录时,他得到一个错误,说“座位已被预订”。简而言之,旅行社在出海的不同时期获得了不同的地位。

另外这个问题也困扰着我的.....Lost更新

假设一个客户有2000美元的到期款项要支付。他花了1000美元,然后又买了500美元的产品。假设这两笔交易现在是从公司的两个不同的柜台输入的。现在,两个柜台用户在上午10:00同时开始输入实际上,在上午10:01客户应该有2000美元-1000美元+500=1500美元等待付款。但正如在丢失的更新中所说的,第一个事务不被考虑,第二个事务覆盖它。所以最终悬而未决的是2000$+500$ =2500$.....我希望公司不要失去客户。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-06 23:36:38

您正在描述逻辑析取。

在后一种情况下,你需要逐项列出发票,并说明客户是否支付了尚未通过系统的东西,以了解它是否会通过。

在第一个错误中,错误只是简单地陈述了显而易见的事实。磁盘访问和文件句柄的情况也是如此。仅仅因为你在选中时不能写入文件,并不意味着当你尝试这样做时,你实际上可以写入文件。

你必须处理这些错误。

在第一种情况下,我不明白为什么你不能说出金额悬而未决的时间。如果发送空发票真的是一个问题,那么你需要在开具前检查一下。如果发票上确实没有项目,那么应该有一些逻辑,说挂在这张发票上没有明细项目或总数为零。但如果在开具和收据之间付款,那么你仍然有一张有效的发票。

如果您正在谈论一次更新一条记录的两件事,那么您需要使用锁定系统来确保在另一次写入发生时不会有其他进程写入。

有各种各样的并发方法可以做到这一点--比如一个半量系统。sql本身也有事务。Google SQL并发性,这是许多解决方案中的一个常见问题。

常见的模式是读取、锁定、读取、写入和解锁。

Understanding Concurrency Control

需要考虑的问题是,您是否需要高性能的读或写操作。您使用的策略将反映这一点。例如,你正在考虑一个单一的领域...但是,如果在一行中更新多个字段呢?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4113627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档