首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >所需的最低隔离级别是多少?

所需的最低隔离级别是多少?
EN

Stack Overflow用户
提问于 2021-06-25 00:55:19
回答 1查看 34关注 0票数 1

我想使用java应用程序事务的版本。也就是说,我将在一个事务中执行select name, version from table_name where ...update table_name set name ='new name', version =:version+1 where vesion = :version。使用这样的事务,我试图获得我还没有处理的记录。正确接收数据所需的最低事务隔离级别是多少?

EN

Stack Overflow用户

发布于 2021-06-24 17:45:38

Read Uncommitted -将看到与读取已提交+脏未提交更改相同的更改,您根本不需要它。

Read Committed -不会看到脏的更改,但会看到空洞、不可重复的读取、丢失的更新是可能的,因为另一个事务可能会提交更改并影响您的更新。对于所描述的场景,这些现象通常是可以的。Read Committed不需要将读锁定保持到事务结束,这是该用例和推荐的的最低级别。

更高的级别是Repeatable Read -为了保证可重复读取和不丢失更新,数据库保持读写锁定,直到事务结束。此级别仅允许幻影读取,这是因为未获取范围锁定。通常你不需要这个严格的级别,因为通常不可重复的读取是可以的--你可以在重复select之后接收到不同的数据,丢失的更新对于你的用例也是可以的。

最高级别是Serializable -当下一个事务仅在前一个事务结束时才开始时,应该与事务的串行执行相同。您将看不到其他提交的更新,没有幻影读取,没有不可重复的读取,没有丢失的更新,因为只有一个事务可以操作数据范围。您不一定需要那个锁。

所以,Read Committed就是答案。如果您想要仔细检查,请考虑哪些bug可能导致每种现象。例如,如果你读取未提交的脏记录,修改并提交它--它看起来像是一个巨大的错误。

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

https://stackoverflow.com/questions/68119883

复制
相关文章

相似问题

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