如何在SQL Server上模拟DEADLOCK?

2023-12-27

我正在尝试模拟 SQL Server 上的死锁。

_|worker_id|salary|
1|1        |100   |
2|2        |300   |

事务 1 在 5 秒内完成。

/* TRANSACTION 1*/
Use dbmcw;

DECLARE @sal1 INT, @sal2 int;

BEGIN TRAN;

SELECT @sal1 = salary
FROM dbo.deadlock_demonstration WITH(UPDLOCK) 
WHERE worker_id = 1;

WAITFOR DELAY '00:00:05.000';

SELECT @sal2 = salary
FROM dbo.deadlock_demonstration WITH(UPDLOCK)
WHERE worker_id = 2;

COMMIT TRAN;

事务 2 在 3 秒内完成。

/* TRANSACTION 2*/
Use dbmcw;

DECLARE @sal1 INT, @sal2 int;

BEGIN TRAN;

SELECT @sal2 = salary
FROM dbo.deadlock_demonstration WITH(UPDLOCK)
WHERE worker_id = 2;

SELECT @sal1 = salary
FROM dbo.deadlock_demonstration WITH(UPDLOCK)
WHERE worker_id = 1;

COMMIT TRAN;

SQL Server 没有给出任何错误。没有发生死锁。为了模拟死锁,我应该改变什么?


您可以使用下面所示的步骤来创建死锁。首先,使用示例数据创建全局临时表。

--Two global temp tables with sample data for demo purposes.
CREATE TABLE ##Employees (
    EmpId INT IDENTITY,
    EmpName VARCHAR(16),
    Phone VARCHAR(16)
)
GO

INSERT INTO ##Employees (EmpName, Phone)
VALUES ('Martha', '800-555-1212'), ('Jimmy', '619-555-8080')
GO

CREATE TABLE ##Suppliers(
    SupplierId INT IDENTITY,
    SupplierName VARCHAR(64),
    Fax VARCHAR(16)
)
GO

INSERT INTO ##Suppliers (SupplierName, Fax)
VALUES ('Acme', '877-555-6060'), ('Rockwell', '800-257-1234')
GO

现在在 SSMS 中打开两个空查询窗口。将会话 1 的代码放置在一个查询窗口中,将会话 2 的代码放置在另一个查询窗口中。然后逐步执行两个会话中的每一个,根据需要在两个查询窗口之间来回。请注意,每个事务都对另一个事务也请求锁定的资源拥有锁定。

Session 1                   | Session 2
===========================================================
BEGIN TRAN;                 | BEGIN TRAN;
===========================================================
UPDATE ##Employees
SET EmpName = 'Mary'
WHERE EmpId = 1
===========================================================
                             | UPDATE ##Suppliers
                             | SET Fax = N'555-1212'
                             | WHERE SupplierId = 1
===========================================================
UPDATE ##Suppliers
SET Fax = N'555-1212'
WHERE SupplierId = 1
===========================================================
<blocked>                    | UPDATE ##Employees
                             | SET Phone = N'555-9999'
                             | WHERE EmpId = 1
===========================================================
                             | <blocked>
===========================================================

结果陷入僵局;一个事务完成,另一事务中止,并向客户端发送错误消息 1205。

关闭“会话 1”和“会话 2”的 SSMS 查询窗口以提交(或回滚)任何打开的事务。最后,清理临时表:

DROP TABLE ##Employees
GO
DROP TABLE ##Suppliers
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在SQL Server上模拟DEADLOCK? 的相关文章

  • MySQL如何根据字段是否存在来插入新记录或更新字段?

    我正在尝试实现一个评级系统 在数据库表中保留以下两个字段 评级 当前评级 num rates 迄今为止提交的评分数量 UPDATE mytable SET rating rating num rates theRating num rate
  • SQL Server 之间

    我有一个表 其中有年 月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 2012 01 50 2012 02 200 现在 我想要SELECT2011 年 11 月至
  • sql 查询的权限被拒绝

    我正在尝试通过经典的 asp 记录集执行以下查询 SQL Select P Name as P Name P Description as P Description from L PagePermission inner join A P
  • Invoke-Sqlcmd 运行脚本两次

    我遇到了一个非常奇怪的问题并且可以重复 基本上 我使用invoke sqlcmd通过使用 inputfile来调用脚本文件 但是如果脚本文件存在一些执行错误 例如插入到列不应为空的表中 则脚本文件将被执行两次 我也可以从探查器中看到这两个执
  • 我不确定在 SQL 中声明这些变量时出了什么问题

    我有以下代码 USE pricingdb go CREATE TABLE dbo Events 060107 2012 Date Time varchar 20 COLLATE SQL Latin1 General CP1 CI AS NU
  • 仅从数据库获取我想要的数据但保留结构

    我正在尝试在 powerbi 上执行此操作 但我想这只是基本的 SQL 我想将我的数据导入到 powerBi 中 但使用一些 id 对其进行过滤 我们以这个例子为例 我与一些公司有数据库 表1 每个公司都有建筑物 表2 每个建筑物有员工 表
  • Mysql为简单频繁查询创建排序索引性能

    我正在处理一个包含大约 400 万条消息条目的 mysql 表 并尝试根据时间戳选择最新的 50 条消息 另一个要求是返回的消息不以固定前缀开头 问题是单个查询大约占用 25 的 cpu 并且最多需要 1 5 秒 该查询经常由多个客户端执行
  • play20 ebean 生成的 sql 在 postgresql 上抛出语法错误

    我正在尝试使用 postgresql 来启动我的 play20 应用程序 以便我可以使用并稍后部署到 Heroku 我跟着这个answer https stackoverflow com questions 12195568 errors
  • Java 空值检查

    我有一个thread1 if object null object play 和另一个thread2可以写null into object随时参考 我将同时运行这些线程 我知道thread2可以重写object后参考null检查并会抛出Nu
  • 使用另一个表中的数据查找并替换 MySQL 中的字符串

    我有两个 MySQL 表 我想使用另一个表中的数据查找和替换一个表中的文本字符串 Table texts messages thx guys i think u r great thx again u rock Table dictiona
  • MySql如何通过过滤多列来限制多个数字?

    我想从数据库中获取 4 个不同类别的 50 个问题 我想要 4 个不同类别中每个类别的不同数量的问题 我的结果集必须包含第一类 12 个问题 第二类 20 个问题 第三类 10 个问题和第四类 8 个问题 我的问题表中总共有 50 个问题
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个
  • 打开脚本任务时 SSIS 丢失文件引用

    我们使用自定义审核程序集 C 在脚本任务中记录 SSIS 中的多种操作 我们将在 GAC 中构建自定义程序集 用于运行时 并发布到 IDE VS2008 的公共程序集区域以供设计时文件引用 后构建完成后 自定义程序集可在运行时使用 并可在文
  • 清除表中的所有行将身份规范重置为零并且不影响外键?

    我们已经创建了数据库框架以及所有关系和依赖关系 但表内部只是虚拟数据 我们需要删除这些虚拟数据 并开始添加正确的数据 我们怎样才能清除所有内容并将主键 IsIdentity 是 保留为零 并且不影响外部表关系结构 多谢 您可以采取以下步骤
  • 在 plsql 中立即执行

    如何从这段代码中得到结果 EXECUTE IMMEDIATE SELECT FROM table name through for loop 通常的方法看起来像这样 for items in select from this table l
  • 基于列顺序的查询速度

    数据库中列类型的顺序对查询时间有影响吗 例如 具有混合排序 INT TEXT VARCHAR INT TEXT 的表的查询速度是否会比具有连续类型 INT INT VARCHAR TEXT TEXT 的表慢 答案是肯定的 这确实很重要 而且
  • 在SQL Server中仅获取浮点数的小数部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 SQL Server 2008
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • 仅当变量不为空时 SQL 添加过滤器

    您好 我有疑问如下 SELECT route id ROUTE ID FROM route master NOLOCK WHERE route ou 2 AND route query l s query AND lang id 1 这里
  • 是否可以自动化 SQL Server 2008 分析器?

    有一个post https stackoverflow com questions 488020 what is your most useful sql trick to avoid writing more code关于有用的 SQL

随机推荐

  • Python - 通过代理使用socket.gethostbyname

    我正在使用 TOR 来代理连接 但在代理 DNS 查找时遇到困难socket gethostbyname www yahoo com 我通过使用wireshark 嗅探流量了解到它没有通过代理发送DNS 流量 这是我正在使用的代码的副本 i
  • 如何更改VS的编译器?

    我正在使用 VS 2010 我更改了编译器 C 代码而不是 C 的设置 它工作正常 但问题是 MS 编译器不支持 C99 标准 因此我正在寻找可以与 VS 10 一起使用的 C 编译器 如何做到这一点 提前致谢 MS Visual Stud
  • 我怎样才能知道我的日历意图的结果?

    从我的应用程序中 我启动日历的目的是 Calendar cal Calendar getInstance Intent intent new Intent Intent ACTION EDIT intent setType vnd andr
  • 返回 varchar(max) 存储过程的输出参数截断为 4000 个字符

    我有一个带有 SQL2012 数据库的经典 ASP 应用程序 我最近将表列从 varchar 8000 更改为 varchar max 因为它不够大 无法存储所需的数据 我可以使用需要存储的所有数据更新列 但我用来返回列数据作为输出参数的
  • EKEventStore.calendars 返回不存在的“日历”对象

    当使用 IOS5 获取所有日历时 EKEventStore eventStore EKEventStore alloc init NSArray calendars eventStore calendars 返回了一个名为 calendar
  • iOS 13 设备上语音识别(支持OnDevice Recognition 标志)

    我正在尝试让 iOS 13 OnDevice 语音识别正常工作 但是 验证 supportOnDeviceRecognition 标志 这是启用 OnDevice 识别的初步步骤 始终返回 false 我使用的是装有 iOS 13 3 的第
  • 如何在 Flutter 中构建 apk 创建旧版本应用程序

    我正在尝试在 Flutter 中构建我的发布应用程序 当我运行时 flutter run 在调试和测试模式下一切正常 但是当我尝试使用以下方法构建发布应用程序时 flutter build apk 它创建了我的一个旧的首次发布应用程序 我之
  • 打印 Haskell 的评估(重写)步骤以用于教育/学习目的。是否可以?

    我用书上的例子来描述这个问题 Simon Thompson 的书 HASKELL 函数式编程的技巧 第 82 页 见下图 显示了以下评估步骤 fac 4 问题 是否可以使用某些工具或 Haskell 调试器 来写出 GHCi 在评估以下值时
  • RecyclerView ItemTouchHelper.Callback:拖动交换条件

    我想以这样的方式实现拖动卡片 当我拖动的卡片与元素不完全重叠而仅重叠 50 时 卡片就会开始重新排列 看一个例子 现在 为了将右侧的卡片移至左侧 我需要将其与我正在拖动的卡片完全重叠 我尝试从 ItemTouchHelper Callbac
  • 为 Winforms DataGrid 控件添加超链接列

    如何为 Winforms DataGrid 控件添加超链接列 现在我正在添加一个像这样的字符串列 DataColumn dtCol new DataColumn dtCol DataType System Type GetType Syst
  • 如何计算IEEE 802.11 CRC-32 FCS?

    这是来自 IEEE Std 802 11 2012 第 8 2 4 8 FCS 字段 我无法理解最后两段 除法的初始余数预设为全部 是什么意思 为什么我们需要这样做 计算字段和 FCS 的串行输入位 是什么意思 将 CRC 初始化为全 1
  • 警告:与字符串文字比较会导致未指定的行为

    我正在开始一个用 C 语言为 linux 编写一个简化 shell 的项目 我对 C 和 Linux 一点也不精通 这正是我认为这是一个好主意的原因 从解析器开始 我已经遇到了一些问题 代码应该很简单 这就是为什么我没有包含任何注释 我收到
  • openssl c++ 3DES 文件加密解密失败

    我正在使用 openssl c lib 使用 3DES 加密解密文件 如果文件包含几个单词 则文件将被加密并解密 但如果源纯文件包含更多单词 则解密不正确 任何建议都会很友善 include
  • 如何在JSP中包含HTML?

    我搜索过这个问题 有一些答案 但与我的问题不完全一样 所以 这是我的jsp代码
  • TransactionScope 默认超时值是多少?

    当我创建 TransactionScope 对象时 如下所示 using TransactionScope ts new TransactionScope Do stuff 给定 ts 对象的默认事务超时是多少 根据 David Brown
  • OpenAL - 确定最大来源

    是否有 API 允许您定义底层声音硬件允许的 OpenAL 源 最大数量 在互联网上搜索 我发现了 2 个建议 继续生成 OpenAL 源 直到出现错误 然而 FreeSL OpenAL 包装器 中有一条注释指出 这 非常糟糕 甚至可能使库
  • Keycloak 在登录过程中添加动态用户会话注释

    我是 Keycloak 的新手 并尝试自定义登录阶段以添加动态参数作为用户会话注释 在旧系统中 用户使用用户名 密码和附加参数登录 让我们称之为动态参数 该动态参数在每个用户登录中可以不同 并且取决于用户 当用户向服务发送请求时 它用于安全
  • 支持 v7 库中的 ShareActionProvider 不起作用

    我正在尝试使用本教程中的支持库来实现 ShareActionProviderhttp developer android com reference android support v7 widget ShareActionProvider
  • ListView 中的居中文本项

    如何水平居中对齐文本项ListView in my Layout 老实说 在问这样一个基本问题之前 我在谷歌上搜索了至少一个小时 Thanks
  • 如何在SQL Server上模拟DEADLOCK?

    我正在尝试模拟 SQL Server 上的死锁 worker id salary 1 1 100 2 2 300 事务 1 在 5 秒内完成 TRANSACTION 1 Use dbmcw DECLARE sal1 INT sal2 int