c# - SQL 服务器 : are transaction locking table for other users?

标签 c# sql-server

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

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

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

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

    Update CustomerTrans 
    set CustomerName = (name2);

Commit;

最佳答案

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

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

这些是您可以做的几点。

关于c# - SQL 服务器 : are transaction locking table for other users?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51324511/

相关文章:

SQL Server - 在许多/之间获取一个单词

Windows Server 2012 中的 C# 动态 COM

c# - 将 ProgressBar 添加到 DataGrid 列

c# - 如何从 MainWindow 中的用户控件获取数据

c# - 如何更改使用 MUST_CHANGE 选项创建的 SQL Server 中的登录密码

c# - SQL Server 生产版的行为与开发版不同。编码有问题!

sql - 在新的数据库服务器上创建新的非对称 key 会导致旧数据失效吗?

sql - 使用 Sql Server 集成服务连接到 Oracle 数据库

c# - 如何将 IEnumerable<String> 拆分为 IEnumerable<string> 组

c# - 如何将文本文件大纲列表转换为对象的递归集合?