SQLServer 中的死鎖說(shuō)明
1. 創(chuàng)建一個(gè)Database,名為InvDB。
2. 執(zhí)行下面腳本創(chuàng)建person表并填充兩條數(shù)據(jù):
3. 在SQL Server Management Studio的兩個(gè)窗口中同時(shí)執(zhí)行下面的查詢:
![]() |
![]() |
這段代碼在默認(rèn)的READ COMMITTED隔離級(jí)別下運(yùn)行,兩個(gè)進(jìn)程分別在獲取一個(gè)排它鎖的情況下,申請(qǐng)對(duì)方的共享鎖從而造成死鎖。
可見(jiàn)一個(gè)進(jìn)程可以正常更新并顯示結(jié)果,而另一個(gè)進(jìn)程已經(jīng)被回滾:
(1 row(s) affected)
Msg 1205, Level 13, State 45, Line 8
Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
4. 啟動(dòng) SQL Server Profiler,選擇下面4種Events:
再執(zhí)行一次上面的死鎖實(shí)驗(yàn),可以看到如下所示的死鎖圖:
非常有趣的一點(diǎn)是:第二次執(zhí)行上述語(yǔ)句不會(huì)發(fā)生死鎖!這是因?yàn)榇藭r(shí)兩個(gè)進(jìn)程中,SQL Server會(huì)智能的識(shí)別出update語(yǔ)句是不需要做的,所以都不會(huì)去獲取排它鎖,當(dāng)然也就不會(huì)死鎖了。SQL Server 2008 的查詢優(yōu)化器還真是非常強(qiáng)大!
相關(guān)文章
SQL Server 數(shù)據(jù)庫(kù)備份和還原認(rèn)識(shí)和總結(jié) (一)
可能許多同學(xué)對(duì)SQL Server的備份和還原有一些了解,也可能經(jīng)常使用備份和還原功能,我相信除DBA之外我們大部分開(kāi)發(fā)員隊(duì)伍對(duì)備份和還原只使用最基礎(chǔ)的功能,對(duì)它也只有一個(gè)大概的認(rèn)識(shí),如果對(duì)它有更深入的認(rèn)識(shí),了解它更全面的功能豈不是更好,到用時(shí)會(huì)得心應(yīng)手2012-08-08SQL對(duì)冗余數(shù)據(jù)的刪除重復(fù)記錄只保留單條的說(shuō)明
本文講一下數(shù)據(jù)庫(kù)中通常存在一些冗余數(shù)據(jù),如重復(fù)記錄就是一種,那這樣的記錄如何刪除呢?2010-03-03sql server2012附加數(shù)據(jù)庫(kù)問(wèn)題解決方法
這篇文章主要介紹了sql server2012附加數(shù)據(jù)庫(kù)問(wèn)題解決方法,需要的朋友可以參考下2014-05-05sqlserver關(guān)于分頁(yè)存儲(chǔ)過(guò)程的優(yōu)化【讓數(shù)據(jù)庫(kù)按我們的意思執(zhí)行查詢計(jì)劃】
先來(lái)對(duì)比兩段分頁(yè)SQL,假設(shè)條件:news表有15萬(wàn)記錄,NewsTypeId=10有9萬(wàn)記錄,當(dāng)前查詢NewsTypeID=10。那么,你會(huì)認(rèn)為哪個(gè)SQL效率會(huì)高呢?2011-08-08SQL建立數(shù)據(jù)庫(kù)及刪除數(shù)據(jù)庫(kù)命令
SQL建立數(shù)據(jù)庫(kù)及刪除數(shù)據(jù)庫(kù)命令,需要使用sqlserver的朋友可以參考下。2011-11-11DBCC CHECKIDENT 重置數(shù)據(jù)庫(kù)標(biāo)識(shí)列從某一數(shù)值開(kāi)始
DBCC CHECKIDENT 重置數(shù)據(jù)庫(kù)標(biāo)識(shí)列從某一數(shù)值開(kāi)始2009-10-10sql server Bulk Insert命令詳細(xì)
這篇文章主要介紹了sql server Bulk Insert命令詳細(xì) ,需要的朋友可以參考下2015-08-08SQL SERVER 的SQL語(yǔ)句優(yōu)化方式小結(jié)
千辛萬(wàn)苦,終于把數(shù)據(jù)庫(kù)服務(wù)器的CPU從超過(guò)50%(開(kāi)5個(gè)程序線程)乃至100%(開(kāi)10個(gè)程序線程)降低到了5%。摸索到了一些門道,總結(jié)一下2009-08-08Sql注入原理簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
所謂SQL注入,就是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。下面通過(guò)本文給大家分享sql 注入原理解析,感興趣的朋友一起看看吧2017-08-08