MSSql Server事務和鎖研究

2021-06-20 18:45:31 字數 1447 閱讀 8105

鎖:主要指共享

鎖和排他鎖兩種經常用到的鎖。

隔離級別:設定在事務上的,

共享鎖的鎖定時間與事務的隔離級別有關。update和delete預設都發出排他鎖。

隔離級別 髒讀

不可重複讀取 幻像

說明未提交讀(read uncommitted)是

是 是

如果其他事務更新,不管是否提交,立即執行

提交讀(read committed預設)

否 是

是 讀取提交過的資料。如果其他事務更新沒提交,則等待

可重複讀(repeatable read)否

否 是

查詢期間,不允許其他事務update

可序列讀(serializable)否

否 否

查詢期間,不允許其他事務insert

或delete

在執行sql

語句的時候查詢語句發出什麼樣的

鎖,這就由事務的隔離級別決定了。一般情況,讀語句

(select)

發出共享

鎖,寫語句

(update,insert,delete)

發出排他

鎖。但是,如果想改變sql語句發出的鎖怎麼辦呢,

sqlserver

為我們提供了

鎖定提示的概念。

鎖定提示對

sql語句進行特別指定,這個指定將覆蓋事務的

隔離級別,相當於是對預設鎖狀態的乙個補充,可以對每條語句的鎖級別進行覆蓋操作。

主要型別有:

型別1①     readuncommitted:不發出鎖

②     readcommitted:發出共享鎖,保持到讀取結束

③     repeatableread:發出共享鎖,保持到事務結束

④     serializable:發出共享鎖,保持到事務結束

型別2①     nolock:不發出鎖。等同於readuncommitted

②     holdlock:發出共享鎖,保持到事務結束。等同於serializable

③     xlock:發出排他鎖,保持到事務結束。

④     updlock:發出更新鎖,保持到事務事務結束。(更新鎖:不阻塞別的事物,允許別的事物讀資料(即更新鎖可與共享鎖相容),但他確保自上次讀取資料後資料沒有被更新)

⑤     readpast:發出共享鎖,但跳過鎖定行,它不會被阻塞。適用條件:提交讀的隔離級別,行級鎖,select語句中。

型別3①     rowlock:行級鎖

②     paglock:頁級鎖

③     tablock:表鎖

④     tablockx:表排他鎖

引用自

MSSqlserver的鎖模式介紹

在sql server資料庫中加鎖時,除了可以對不同的資源加鎖,還可以使用不同程度的加鎖方式,即有多種模式,sql server中鎖模式包括 1.共享鎖 s 共享鎖用於所以的制度資料操作。共享鎖是非獨佔的,允許多個併發事務讀取其鎖定的資源。預設情況下,資料被讀取後,sql server立刻釋放共享鎖...

事務和鎖 SQLite

2 事務 transaction 2.1 事務的週期 transaction lifecycles 程 序與事務之間有兩件事值得注意 1 哪些物件在事務下執行 這直接與api有關。2 事務的生命週期,即什麼時候開始,什麼時候結束以及它在什麼時候開始影響別的連線 這點對於併發性很重要 這涉及到sqli...

mysql 事務和鎖

事務是dbms得執行單位 開啟事務 set autocommit 0 取消自動提交 或begin 手動開啟乙個事務 提交乙個事務 commit 回滾乙個事務 rollback 在mysql的innodb 引擎中,預設每個操作 insert,update,select for update lock ...