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

标签 sql sql-server transactions locking

我们使用 ADO.NET 连接到 SQL 2005 服务器,并在其中执行大量插入/更新和选择。我们将其中一项更新更改为事务内部,但当我们执行此操作时,它似乎 (b) 锁定了整个表,无论我们在事务上设置的隔离级别如何。

我看到的行为是:

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

这是正确的吗?

最佳答案

您的问题的答案是:这取决于情况。

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

如果您更新的表的比例超过一定比例(我记得是可配置的),那么 SQL Server 会给您一个表级锁,这可能会阻止选择。

最好的引用是:

祝你好运。

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

相关文章:

sql - 如何在 SQL Server 中给定列的末尾追加字符串?

mysql - 不同语言测验的数据库设计

sql-server - 使用 CTE、 View 和子查询是否有任何性能差异?

ruby-on-rails - 如何锁定一组对象以进行操作?

Mysql 事务在存储过程中不起作用

sql - 使用 SQL 函数而不是 SELECT 的优势

sql - 从不同用户 session 列表中选择最早的日期和时间

sql-server - 已成功与服务器建立连接,但登录过程中出现错误。 (错误号 : 233)

sql-server - 压缩数据如何存储在缓冲区高速缓存中,压缩的还是未压缩的?

sql-server - 为什么我的事务会在 INSERT INTO 失败时自动回滚?