【问题标题】:What IsolationLevel should I use in my TransactionScopes我应该在我的事务范围中使用什么隔离级别
【发布时间】:2013-11-02 10:38:31
【问题描述】:

我应该在我的 TransactionScopes 中使用什么 IsolationLevel:

  1. 读取单个记录,我可能会更新该记录。这个记录是 独立于数据库中的所有其他数据,因此我只需要锁定那一条记录。
  2. 试图读取单个记录。如果不存在记录,则使用该记录创建记录 该表中的值。这独立于所有其他表,但它 需要锁定这个表,所以另一个线程也找不到 记录,然后添加相同的记录。

在第二种情况下,我认为我需要锁定表以停止对表的插入和对记录读取的任何访问,但允许读取表中的其他记录以及对任何其他表的任何访问。

谢谢 - 戴夫

【问题讨论】:

    标签: entity-framework transactionscope isolation-level


    【解决方案1】:

    我不确定 EF,因为我没有使用它,但我的答案如下:

    1. 使用'REPEATABLE READ'就足够了,因为它“指定语句不能读取已被其他事务修改但尚未提交的数据,并且没有其他事务可以修改当前已读取的数据交易,直到当前交易完成。”

    2. 我会使用“SERIALIZABLE”,因为“在当前事务完成之前,没有其他事务可以修改当前事务已读取的数据。”

    您可以阅读更多关于isolation levelshere

    【讨论】:

    • 我不确定 SERIALIZABLE 是否足够,因为它不允许在读取的范围内插入键,但根据定义,插入将是一个大于任何读取范围的值。 ???
    • 如果您使用“SERIALIZABLE”,则“在事务期间不能添加新数据”。还不够吗?
    • 根据上面的链接“其他事务不能插入新行,其键值将落在当前事务中任何语句读取的键范围内”。我读到这比没有添加新数据要少得多。只是在读取的范围内没有新数据。我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 2015-09-02
    • 1970-01-01
    • 2023-04-05
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多