sql server 鎖定模式有三種:共享( S鎖),更新(U鎖),排他(X鎖);
S鎖是共享鎖,如果事務T對數(shù)據(jù)A加上共享鎖后,則其他事務只能對A再加共享鎖,不能加排他鎖。獲準共享鎖的事務只能讀數(shù)據(jù),不能修改數(shù)據(jù)。
個人理解為,對數(shù)據(jù)A的操作就只能是SELECT ,(聯(lián)想下,S鎖,不就是Select的首字母么),其他事務對A數(shù)據(jù)的UPDATE ,DELETE都不能進行;
U鎖是更新鎖。用于可更新的資源中。防止當多個會話在讀取、鎖定以及隨后可能進行的資源更新時發(fā)生常見形式的死鎖。
原理解釋:
更新鎖
更新 (U) 鎖可以防止通常形式的死鎖。一般更新模式由一個事務組成,此事務讀取記錄,獲取資源(頁或行)的共享 (S) 鎖,然后修改行,此操作要求鎖轉(zhuǎn)換為排它 (X) 鎖。
如果兩個事務獲得了資源上的共享模式鎖,然后試圖同時更新數(shù)據(jù),則一個事務嘗試將鎖轉(zhuǎn)換為排它 (X) 鎖。
共享模式到排它鎖的轉(zhuǎn)換必須等待一段時間,因為一個事務的排它鎖與其它事務的共享模式鎖不兼容;發(fā)生鎖等待。
第二個事務試圖獲取排它 (X) 鎖以進行更新。
由于兩個事務都要轉(zhuǎn)換為排它 (X) 鎖,并且每個事務都等待另一個事務釋放共享模式鎖,因此發(fā)生死鎖。
若要避免這種潛在的死鎖問題,請使用更新 (U) 鎖。一次只有一個事務可以獲得資源的更新 (U) 鎖。
如果事務修改資源,則更新 (U) 鎖轉(zhuǎn)換為排它 (X) 鎖。否則,鎖轉(zhuǎn)換為共享鎖。
個人理解,打個比方,A,B都拿把槍指著對方說:”我等你放下槍我就放下槍“,大家都等對方放下槍,于是就這么死僵持著......
X鎖是排他鎖,也叫獨占鎖,事務對A資源的insert ,update ,delete要用獨占,不然的話亂套了;這是為了保護數(shù)據(jù)再一次操作中的準確性;
個人理解就是,一次一個....
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
您可能感興趣的文章:- SQL Server 2008數(shù)據(jù)庫分布式查詢知識
- SQL Server游標的介紹與使用
- SQL Server視圖的講解
- Sql Server的一些知識點定義總結(jié)
- C#連接SQL Server的實現(xiàn)方法
- laravel5使用freetds連接sql server的方法
- 詳解易語言操作sql server實例
- SQL Server中的SELECT會阻塞SELECT嗎
- sqlserver2008首次登錄失敗問題及解決方法
- SQL Server四個系統(tǒng)表的知識講解