【发布时间】:2014-05-14 13:04:18
【问题描述】:
我正在尝试在 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 没有给出任何错误。没有发生死锁。为了模拟死锁,我应该改变什么?
【问题讨论】:
-
为什么读取会导致死锁?
-
我的数据库管理课程需要演示 SQL SERVER 上的死锁。所以我需要死锁
-
@user3388473 - 您在本课程中使用的是哪本书?谢谢。
-
Connolly T., C. Begg 数据库系统设计、实施和管理的实用方法
-
technet.microsoft.com/en-us/library/aa213039%28v=sql.80%29.aspx 这是一个很好的资源..也许使用排他锁
标签: sql sql-server concurrency deadlock