引用自:http://jengting.blogspot.tw/2012/06/sql.html

根據 MSDN 將死結數量降至最低 裡的圖型模擬死結產生 ~~

在 SSMS 內開啟兩個 T-SQL 查詢(兩個執行緒),利用下面語法來執行,請先執行 T-SQL 查詢 1,再執行 T-SQL 查詢 2。

步驟簡易說明:

  • Step 1:建立一個 T-SQL 查詢 1,開啟一個交易,並進行更新 Supplier 資料
  • Step 2:建立另一個 T-SQL 查詢 2,開啟一個交易,並進行更新 Part
  • Step 3:回到 T-SQL 查詢 1,更新 Part
  • Step 4:回到 T-SQL 查詢 2,更新 Supplier

藉此產生一個死結。

  • 建立測試資料
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
IF OBJECT_ID('Supplier') IS NOT NULL
  DROP TABLE Supplier
 
IF OBJECT_ID('Part') IS NOT NULL
  DROP TABLE Part
 
CREATE TABLE Supplier
  (
    SPLNO char(5),
    SPLName char(10),
    CONSTRAINT [PK_Supplier] PRIMARY KEY CLUSTERED ([SPLNO] ASC)
  )
 
CREATE TABLE Part
  (
    SPLNO char(5),
    Product char(50),
    CONSTRAINT [PK_Part] PRIMARY KEY CLUSTERED ([SPLNO] ASC,[Product] ASC)
  )
 
INSERT INTO Supplier VALUES('00000','Microsoft')
INSERT INTO Part VALUES('00000','SQL Server 2012')
  • T-SQL 查詢 1
1
2
3
4
5
BEGIN TRANSACTION
UPDATE Supplier SET SPLName = 'Microsoft' WHERE SPLNO = '00000' -- Step 1
WAITFOR DELAY '00:00:05'
UPDATE Part SET Product = 'SQL Server 2012' WHERE Product = 'SQL Server 2012' -- Step 3
COMMIT TRANSACTION
  • T-SQL 查詢 2
1
2
3
4
5
BEGIN TRANSACTION
UPDATE Part SET Product = 'SQL Server 2012' WHERE Product = 'SQL Server 2012' -- Step 2
WAITFOR DELAY '00:00:05'
UPDATE Supplier SET SPLName = 'Microsoft' WHERE SPLNO = '00000' -- Step 4
COMMIT TRANSACTION
  • 死結錯誤訊息
 
訊息 1205,層級 13,狀態 45,行 1
交易 (處理序識別碼 52) 在 鎖定 資源上被另一個處理序鎖死並已被選擇作為死結的犧牲者。請重新執行該交易。

SQL模擬死結產生的更多相关文章

  1. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (1):NetBeans 寫 Servlet (转帖)

    JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (1):NetBeans 寫 Servlet 功能:這支程式的主要功能是將 javafx 與 swi ...

  2. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (3):部署設定及應用 (转帖)

    說明:這一篇主要是說明如何將程式部署到Application Server,以及程式如何運作,產生的檔案置於何處,以及如何以瀏覽器呈現(Applet),或是當成桌面應用程式,或是 桌面Applet,這 ...

  3. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (2):JavaFX建立及程式碼說明 (转帖)

    說明:就如同標題一樣,前端會用到JavaFX.Swing.Java Web Start.Google Map 的技術, 後端就是JDBC.Servlet的技術,以及我們會簽署認證jar檔案,這樣才可存 ...

  4. Datagard產生gap

    本文轉載自無雙的小寶的博客:http://www.cnblogs.com/sopost/archive/2010/09/11/2190085.html 有時候因為網路或備份故障等原因,主機所產生的歸檔 ...

  5. ASP.NET Web API 文件產生器 - 使用 Swagger

    转帖:http://kevintsengtw.blogspot.hk/2015/12/aspnet-web-api-swagger.html Swagger 是一套 API 互動文件產生器,使用 HT ...

  6. COB Epoxy灌膠時氣泡產生的原因與解決方法

    COB的黑膠 (Epoxy)有氣泡通常是不被允許的,因為外部氣孔不但會影響到外觀,內部氣孔更有可能會破壞 Wire bonding 的鋁線穩定度.既使在COB製程剛完成的時候沒有通過功能測試,也不代表 ...

  7. 使用 FOR XML PATH 產生 XML 格式時,遇到 NULL 該如何處理?

    當您嘗試利用 FOR XML PATH 產生 XML 格式時,若遇到 Result Set 為 Null 時,會導致整個查詢結果為 Null ,若您想要在查不到資料時,可以顯示自訂的內容,本文將提供可 ...

  8. javascript中的function命名空間與模擬getter、setter

    function的命名空間 在javascript中,function也可以擁有自己的命名空間例如以下這段程式碼: 12345678 function () { return 'I am A';} A ...

  9. C# 在執行程式目錄下產生文件夾

    //產生一個Log文件夾string appPath = Application.StartupPath; if (!Directory.Exists(appPath + "/log&quo ...

随机推荐

  1. js导入的注意.txt

    如有两个外部js文件: jquery-1.8.2.min.js Jqery的系统文件 LYFArray.js 和个人的 ===============我要将两个js文件导入一个页面的方法:====== ...

  2. HDU 3416 Marriage Match IV

    最短路+最大流 #include<cstdio> #include<cstring> #include<string> #include<cmath> ...

  3. robotframework+seleniumlibrary自动化测试:测试环境搭建

    robotframework是由python编写的自动化测试框架,使用robotframework需要安装 python库 python 和 robotframework 的下载地址都可百度到 环境搭 ...

  4. linux脚本Shell之awk详解

    一.基本介绍1.awk: awk是一个强大的文本分析工具,在对文本文件的处理以及生成报表,awk是无可替代的.awk认为文本文件都是结构化的,它将每一个输入行定义为一个记录,行中的每个字符串定义为一个 ...

  5. Chapter 1 First Sight——29

    I was anxious not to be late for class on my first day. 在我第一天上学的时候我非常焦虑我会上课迟到. One of my new acquain ...

  6. 在线协作沟通工具DesignBoard帮助设计团队更有效地进行沟通与版本管理

    设计稿呈现缺乏整体性.远程沟通效率低.多版本管理混乱,这可能是很多创业团队都面临的问题,并且这些问题都将直接影响到产品开发进度.国内创业团队彩程设计也曾面临同样的问题,后来他们在做某个新项目时尝试把设 ...

  7. hdu_4734_F(x)(数位DP水)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 题意:给你一个F(x)的定义,然后给你a,b,问你在0到b包括b有多少个数满足F(x)<= ...

  8. c语言中->的一个作用

    为了使用方便和直观,c语言中结构体指针带成员(*p).num可以用p->num来代替. ->称为指向运算符:

  9. 5.如果第4题中在DOS命令下输入:java Hello 出现以下结果:Bad command or the file name 可能是什么原因?请说明理由。

    1.没有输入javac指定路径,而是直接输入java Hello. 2.前面已经用过一次指令,没有重新输入路径.

  10. jquery新窗口打开链接

    第一种:下面的代码是针对m35ui这个样式下的a都是在新窗口打开    <script type="text/javascript">  jQuery(document ...