首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使DB为后续事务返回不同的行?

如何使DB为后续事务返回不同的行?
EN

Stack Overflow用户
提问于 2010-07-28 08:09:01
回答 1查看 83关注 0票数 2

下面的流位于多线程环境中。

  1. 启动事务
  2. 从db读取顶行数(基于列)
  3. 检查一些标准
  4. 更新这些行集
  5. 提交/回滚事务

我使用乐观锁定来处理多线程场景,但在上述情况下,DB总是返回相同的行集,因此如果第二个线程同时运行,它总是会失败。

有更好的方法来处理这件事吗?我们是否可以强制DB使用某些选项为每个事务返回不同的行集?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-28 08:25:41

您为所有线程获取相同的顶级n记录的原因是事务的I (原子性、一致性、隔离性、持久性)原则。隔离意味着其他操作无法访问在尚未完成的事务期间修改的数据。因此,在您的线程提交它们的事务之前,其他线程无法看到它们所做的事情。

可以将大多数数据库上的隔离水平更改为下列之一:

  • 斯莱尔
  • 可重复读
  • 宣读承诺
  • 读未承诺

在您的示例中,您可能希望读未提交,因为它允许一个事务查看由其他事务所做的未提交更改。

注意:对于大多数应用程序来说,这几乎肯定是错误的隔离级别,并可能导致数据损坏。如果您在这里描述的其他应用程序正在访问相同的数据库,则可能不希望更改隔离级别,因为这些应用程序可能会开始出现意外和不正确的行为。

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

https://stackoverflow.com/questions/3350983

复制
相关文章

相似问题

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