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)文章
SQLSERVER 表分區(qū)操作和設(shè)計(jì)方法
SQLSERVER 表分區(qū)操作和設(shè)計(jì)方法,需要的朋友可以參考下。2010-09-09SQL入侵恢復(fù)xp_cmdshell方法總結(jié)
恢復(fù)xp_cmdshell SQL Server阻止了對(duì)組件 'xp_cmdshell' 的過(guò)程'sys.xp_cmdshell' 啟用2010-08-08SQL語(yǔ)句去掉重復(fù)記錄,獲取重復(fù)記錄
SQL語(yǔ)句去掉重復(fù)記錄,獲取重復(fù)記錄...2007-03-03SQL中的Subquery & CTE & Temporary Tab
這篇文章主要介紹了SQL中的Subquery & CTE & Temporary Table 區(qū)別深度對(duì)比分析,這三個(gè)技術(shù)都用于創(chuàng)建臨時(shí)數(shù)據(jù)集,但它們?cè)趯?shí)現(xiàn)方式、使用場(chǎng)景和性能特點(diǎn)上有顯著差異,感興趣的朋友一起看看吧2025-05-05卸載VS2011 Developer Preview后Sql Server2008&nbs
話說(shuō)上回我為了嘗嘗螃蟹的味道而裝了 VS2011 Developer Preview,但是裝完后立馬卸載掉了,原因是這家伙的安裝目錄位置沒(méi)用,我設(shè)置到D盤(pán)的但是裝完后D盤(pán)的文件夾只有一百多M,而足足8G+的空間是在C盤(pán)上消耗的。2011-11-11sqlserver 快速生成漢字的首拼字母的函數(shù)(經(jīng)典)
經(jīng)常要對(duì)姓名按拼音搜索,所以需要做如下函數(shù)來(lái)快速獲取首拼,需要的朋友可以參考下2012-05-05完美解決SQL server2005中插入漢字變成問(wèn)號(hào)的問(wèn)題
以下是對(duì)在SQL server2005中插入漢字變成問(wèn)號(hào)的解決辦法進(jìn)行了分析介紹。需要的朋友可以過(guò)來(lái)參考下2013-08-08