引用自: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. SpringMvc处理post请求乱码的filter

    <filter>         <filter-name>encodingFilter</filter-name>         <filter-clas ...

  2. Redis简介一

    Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的key-valu ...

  3. 在TextView上显示图片信息

    布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  4. zookeeper入门知识

    ZooKeeper 是什么? ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) . 蜜蜂(Hive) .小猪(Pig)  的管理员, Apache Hbase和 Apache ...

  5. hdu_1348_Wall(凸包)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1348 题意:让你求n个点的凸包,凸包离点的距离为l 题解:就凸包周长+一个半径为l的圆周长 #incl ...

  6. JavaScript学习总结(十七)——Javascript原型链的原理

    一.JavaScript原型链 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法.其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.在JavaScript中, ...

  7. 发现在看完objc基本语法之后,还是看Apple文档比较有用。

    现在已经停止找中文资料了,因为很多例子已经过时,运行不出来. 看完objc基本语法以后,Apple的资料也看得懂了. 还是应该跟着Apple的入门指南开始学,今后也应该以Apple的文档为主.

  8. Ansible4:Ad-hoc与命令执行模块【转】

    Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbook.Ad-hoc的执行依赖于模块,ansible官方提供了大量的模块. 如:command ...

  9. listview前几个item的图片怎么是空白的、listview更新了ui不起作用、在handler里更新了UI不起作用

    不是不起作用,不信你可以在更新ui代码附近加输出的log,说明程序是跑到那里了.但是未达到我们的想要的效果. 我们知道在listview里更新UI,listview的适配器Adapter里有个getV ...

  10. perl-cgi命令行调试

    来源: http://www.cnblogs.com/itech/archive/2012/09/23/2698838.html 参考: http://docstore.mik.ua/orelly/l ...