首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >丢失更新解决方案

问丢失更新解决方案
EN

Stack Overflow用户
提问于 2016-03-17 14:28:31
回答 3查看 3.9K关注 0票数 0

我想解决我的应用程序中丢失的更新问题,在读取和更新一个事务之间,另一个事务执行更新时的问题。

我想知道的是,我是否可以通过在Server中设置一定的隔离级别(READ_COMMITTED、READ_COMMITTED_SNAPSHOT或快照)来解决这个问题,或者我必须在应用层实现逻辑,比如向实体类中添加行版本字段,然后手动检查它并在发生时执行回滚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-18 15:28:49

READ_COMMITTED和READ_COMMITTED_SNAPSHOT似乎不支持Update conflict detection,只有SNAPSHOT支持它。资料来源:了解基于行版本控制的隔离级别.

因此,要解决DB层中丢失的更新,必须使用SNAPSHOT隔离级别。

如果使用READ_COMMITTED或READ_COMMITTED_SNAPSHOT,则必须在应用层解决丢失的更新问题。下面是如何实现实体框架中的行版本控制的方法。

票数 1
EN

Stack Overflow用户

发布于 2016-05-18 11:54:14

这篇文章很好地解释了丢失的更新问题-- https://vladmihalcea.com/a-beginners-guide-to-database-locking-and-the-lost-update-phenomena/,它建议了可重复读取隔离级别,并且它实际上是有效的(在这种情况下,在Postgres中)。

但是,例如,在mysql中,可重复读取并不能解决丢失的更新,您必须使用某种锁定,例如SELECT ... FOR UPDATE - http://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html。

票数 1
EN

Stack Overflow用户

发布于 2016-03-17 14:56:44

为了防止丢失更新,事务必须在至少可重复读取的隔离级别上运行,并与应用层中的事务块相结合。

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

https://stackoverflow.com/questions/36063465

复制
相关文章

相似问题

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