加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – TransactionScope锁定表和IsolationLevel

发布时间:2020-12-12 08:54:57 所属栏目:MsSql教程 来源:网络整理
导读:我想在我的项目中使用TransactionScope.我读到了它,我发现它在数据库中创建了一个隐式事务.我想知道TransactionScope是否锁定它操作的表? 例如,在此代码中: using (Entities ent = new Entities()){ using (TransactionScope tran = Common.GetTransactionS
我想在我的项目中使用TransactionScope.我读到了它,我发现它在数据库中创建了一个隐式事务.我想知道TransactionScope是否锁定它操作的表?

例如,在此代码中:

using (Entities ent = new Entities())
{
    using (TransactionScope tran = Common.GetTransactionScope())
    {
        var oldRecords = ent.tblUser.Where(o => o.UserID == UserID);

        foreach (var item in oldRecords)
        {
           ent.tblUser.DeleteObject(item);
        }

public static TransactionScope GetTransactionScope()
{
    TransactionOptions transactionOptions = new TransactionOptions();
    transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.Serializable;
    return new TransactionScope(TransactionScopeOption.Required,transactionOptions);
}

tblUser是否锁定,直到完成命令问题?

在显式事务中IsolationLevel是否类似于隐式事务?

谢谢

解决方法

它是执行锁定的SQL Server – 如果需要的话.任何UPDATE或DELETE操作都必须对它影响的那些行进行独占锁定 – 如果这些行已被另一个事务锁定,则它不能这样做.

因此,在您的情况下,如果您从数据库中删除了许多行,则默认情况下SQL Server将仅锁定那些行 – 正在删除的行.它不会锁定整个表格.这是除非您一次删除大量行 – 如果您在单个事务中删除超过5,000行,SQL Server将尝试执行锁升级并锁定整个表(而不是保留和管理5000个人行锁).

隔离级别仅定义读取将锁定行的时间长度 – 默认情况下(READ COMMITTED),该行仅在读取时具有共享锁定 – 通常是非常短的时间.使用隔离级别REPEATABLE READ,共享锁将保持到当前事务结束,而SERIALIZABLE不仅会锁定正在读取的行,而且会锁定整个行范围.但同样:这只会影响READ操作 – 它对DELETE或UPDATE语句没有直接影响(除了在行上有共享锁可能会阻止DELETE获取它需要的独占锁)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读