首页 > 解决方案 > SQL Server:其他用户的事务锁定表吗?

问题描述

当我运行多个查询时,事务是否会锁定我的表?

示例:如果另一个用户尝试在我使用事务的同时发送数据,会发生什么?

另外我怎样才能避免这种情况,还要确保所有数据都已成功插入数据库?

Begin Tran;
    Insert into Customers (name) values(name1);

    Update CustomerTrans 
    set CustomerName = (name2);

Commit;

标签: c#sql-server

解决方案


您必须巧妙地实施交易。以下是一些与性能相关的要点:-

  1. 锁定乐观/悲观。在悲观锁定中,整个表被锁定。但在乐观锁定中,只有特定的行被锁定。
  2. 隔离级别 Read Committed/Read Uncommitted。当表被锁定时,如果它允许,则取决于您的业务场景,那么您可以使用 NoLock 进行脏读。
  3. 尝试在更新中使用 where 子句并进行适当的索引。对于任何繁重的查询,请检查查询计划。
  4. 事务超时应该非常少。因此,如果表被锁定,那么它应该抛出错误并且在 catch 块中你可以重试。

这些是您可以做的几点。


推荐阅读