【问题标题】:What transaction isolation level should I use我应该使用什么事务隔离级别
【发布时间】:2015-11-24 15:18:31
【问题描述】:

我正在开发一个自定义应用程序,该应用程序允许用户从数据库中插入/更新/删除/检索数据。

我使用的存储过程会影响一些表,因此我使用事务并且我希望能够锁定这些表,以防止在多个用户插入、删除、更新或检索 (CRUD) 数据时发生意外事件。

我的问题是在这里使用的最佳隔离级别是什么,我已经阅读了有关隔离级别的 MSDN 并试图理解它以及四处搜索,如果已经在这里完成的人可以快速评论将不胜感激。

【问题讨论】:

    标签: database vb.net sql-server-2005 crud


    【解决方案1】:

    默认的 .Net 事务级别是可序列化的。为什么需要另一个事务级别?您是否认为没有显式事务,其他连接将能够从您下面更改数据?如果是这样,那是不正确的——所有操作都发生在显式或隐式事务中,唯一可能得到不一致结果的情况是,如果您将事务隔离级别显式设置为允许它的值。

    编辑:正如评论中指出的,数据库引擎的默认值是READ COMMITTED,但.Net transactions/connections 的默认值是SERIALIZABLE,需要注意的是——如果事务级别发生了变化,它将不会“丢弃”用于池连接。这意味着除非您自己设置,否则您永远无法绝对确定它是什么。在大多数情况下,您可以假设 SERIALIZABLE 并保持不变。

    【讨论】:

    • @VladimirBaranov:这是默认的 DATABASE 隔离级别,我相信对于 .net/ado/entity 框架来说是不同的。
    • 糟糕,我没想到。不幸的是,除非编辑了答案,否则我无法撤消投票。您可以将我之前评论中的链接添加到答案中或以其他方式对其进行编辑,我应该能够恢复反对票。
    • @VladimirBaranov:我已经编辑了我的答案,以便更清楚地说明我在谈论 .net 默认值、关于数据库默认值的链接以及解释 .net 默认值的链接(以及一个警告,即'未包含在任何链接中)。
    • 我可以告诉您,您对交易了解很多,但如果没有关于工作量和要求的大量详细信息,这个问题是无法回答的。
    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 2023-04-05
    • 2011-09-30
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多