c# - SQL Server:其他用户的事务锁定表吗?
问题描述
当我运行多个查询时,事务是否会锁定我的表?
示例:如果另一个用户尝试在我使用事务的同时发送数据,会发生什么?
另外我怎样才能避免这种情况,还要确保所有数据都已成功插入数据库?
Begin Tran;
Insert into Customers (name) values(name1);
Update CustomerTrans
set CustomerName = (name2);
Commit;
解决方案
您必须巧妙地实施交易。以下是一些与性能相关的要点:-
- 锁定乐观/悲观。在悲观锁定中,整个表被锁定。但在乐观锁定中,只有特定的行被锁定。
- 隔离级别 Read Committed/Read Uncommitted。当表被锁定时,如果它允许,则取决于您的业务场景,那么您可以使用 NoLock 进行脏读。
- 尝试在更新中使用 where 子句并进行适当的索引。对于任何繁重的查询,请检查查询计划。
- 事务超时应该非常少。因此,如果表被锁定,那么它应该抛出错误并且在 catch 块中你可以重试。
这些是您可以做的几点。
推荐阅读
- sql - SQL查询从1个表中选择并基于2列返回数据
- c - 为 C 程序指定在同一库中打开 Python 程序的路径的好方法是什么?
- c# - WPF XAML - 文本框的设计时间和可见性
- image - 矩阵的字典排序
- r - 从数据框中计算相似发音词的数量和名称
- reactjs - 如何在 React Native 中打开新屏幕
- python - 使用 MingW 在 Windows 上发布 PyGObject/GTK+ 应用程序
- c++ - 为什么我们需要关闭一个文件来完成一个文件的写入过程?
- django - 试图让 log_error 装饰器在 Django 中工作,但得到元组错误
- python - 使用 Open CV 从线条中提取消失点