gpt4 book ai didi

SQL 事务 (b) 锁定选择 - 我的理解是否正确

转载 作者:行者123 更新时间:2023-12-04 07:08:35 24 4
gpt4 key购买 nike

我们使用 ADO.NET 连接到 SQL 2005 服务器,并在其中执行许多插入/更新和选择。我们将其中一个更新更改为在事务内,但是当我们执行此操作时,它似乎会 (b) 锁定整个表,而不管我们在事务上设置的 IsolationLevel。

我似乎看到的行为是:

  • 如果您没有交易,那么这是一场全力以赴的战斗(失败者陷入僵局)
  • 如果你有几笔交易,那么他们总是赢,并阻止所有其他交易,除非
  • 如果您有一些交易并且您在其余交易上设置了类似 nolock 的内容,那么您将获得交易并且没有任何阻塞。 这是因为无论事务如何,每个语句(选择/插入/删除/更新)都有一个隔离级别 .

  • 这样对吗?

    最佳答案

    你的问题的答案是:这取决于。

    如果您要更新表,SQL Server 会使用多种策略来决定要锁定的行数、行级锁、页锁或全表锁。

    如果您要更新超过一定百分比的表(我记得是可配置的),那么 SQL Server 会为您提供一个表级锁,它可能会阻止选择。

    最好的引用是:

  • 了解 SQL Server 中的锁定:
    http://msdn.microsoft.com/en-us/library/aa213039(SQL.80).aspx
    (对于 SQL Server 2000)
  • SQL Server 中的锁定简介:http://www.sqlteam.com/article/introduction-to-locking-in-sql-server
  • 数据库引擎中的隔离级别:http://msdn.microsoft.com/en-us/library/ms189122.aspx (适用于 SQL Server 2008,但 2005 版本可用)。

  • 祝你好运。

    关于SQL 事务 (b) 锁定选择 - 我的理解是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/720475/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com