蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務(wù) 價值

  SQL Server事務(wù)隔離級別

發(fā)布日期:2022/9/7 21:49:13      瀏覽量:

事務(wù)

定義

事務(wù)是作為單個邏輯工作單元執(zhí)行的一系列操作。 一個邏輯工作單元必須有四個屬性,稱為原子性、一致性、隔離性和持久性 (ACID) 屬性,只有這樣才能成為一個事務(wù)。

一個事務(wù)可以包含多個操作。

事務(wù)特性

  • 原子性(atomicity)

事務(wù)中的所有操作要么全部成功,要么全部失敗,沒有第三種狀態(tài)。

  • 一致性(consistency)

事務(wù)執(zhí)行前后數(shù)據(jù)都處于一個最終一致性的狀態(tài);比如庫存扣減前后庫存總量(剩余庫存+已扣減庫存)總是保持一致。

  • 隔離性(isolation)

多事務(wù)執(zhí)行情況下,事務(wù)與事務(wù)之間相互無感知,相互不影響。

  • 持久性(durability)

事務(wù)一旦提交,其更改對數(shù)據(jù)庫中的數(shù)據(jù)是永久性的,即使數(shù)據(jù)庫發(fā)生故障也必須要保證事務(wù)正確執(zhí)行。

事務(wù)分類

  • 顯式事務(wù)

通過begin transaction標記事務(wù)開始,由commit transaction提交事務(wù),rollback transaction回滾事務(wù)。

  • 隱式事務(wù)

使用set implicit_transactions on 語句,將隱式事務(wù)模式設(shè)置為打開。該模式下不必使用 begin transaction 開啟事務(wù),當一個事務(wù)結(jié)束后會自動啟用下一個事務(wù),只需使用 commit transaction 提交事務(wù)或 Rollback Transaction 回滾事務(wù)即可。

  • 自動提交事務(wù)

SQL Server 的默認模式,它將每條單獨的 T-SQL 語句視為一個事務(wù)。如果成功執(zhí)行,則自動提交。如果錯誤,則自動回滾。相比大家也沒有遇到過update一條記錄多個字段的時候部分字段更新成功,部分字段更新失敗。

事務(wù)不隔離產(chǎn)生的問題

  • 更新丟失

多個事務(wù)更新同一條數(shù)據(jù)時導(dǎo)致最后更新完成的事務(wù)覆蓋掉了之前事務(wù)的更新,這就導(dǎo)致了前面事務(wù)的更新丟失。

  • 臟讀

讀事務(wù)讀取到了寫事務(wù)還未提交的數(shù)據(jù)更改,寫事務(wù)執(zhí)行過程中回滾了,導(dǎo)致讀事務(wù)前后讀取的數(shù)據(jù)不一致。

  • 不可重復(fù)讀

在讀事務(wù)范圍內(nèi)多次執(zhí)行查詢的結(jié)果不一致,因為在讀取事務(wù)執(zhí)行期間有寫事務(wù)讀事務(wù)讀取的數(shù)據(jù)進行了修改。

  • 幻讀

在讀事務(wù)范圍內(nèi)多次執(zhí)行查詢的結(jié)果記錄條數(shù)不一致,因為在讀取事務(wù)執(zhí)行期間有寫事務(wù)讀事務(wù)讀取的數(shù)據(jù)范圍進行了添加或刪除。

事務(wù)隔離級別

Read Uncommitted(可讀未提交)

允許事務(wù)讀取寫事務(wù)未提交的更改(也就是允許臟讀),但不允許更改寫事務(wù)正在處理的數(shù)據(jù)(不允許更新丟失)。

Read Committed(可讀已提交)

不允許其他事務(wù)讀取寫事務(wù)未提交的更改(不允許臟讀),但允許更改讀事務(wù)正在讀取的數(shù)據(jù)(允許不可重復(fù)讀),這也是SQL SERVER默認的事務(wù)隔離級別。

Repeatable Read(可重復(fù)讀)

不允許其他事務(wù)更改讀事務(wù)正在讀取的數(shù)據(jù)(不允許不可重復(fù)讀),但是允許新增或刪除(允許幻讀)。

Serializable(序列化)

要求事務(wù)只能一個一個執(zhí)行,不能并發(fā),但是效率地下,消耗數(shù)據(jù)庫性能,一般不使用。

其他隔離級別(拷貝的官方文檔)

讀取已提交的快照(READ_COMMITTED_SNAPSHOT)

當 READ_COMMITTED_SNAPSHOT 數(shù)據(jù)庫選項設(shè)置為 ON 時,已提交讀隔離使用行版本控制提供語句級讀取一致性。 讀取操作只需要 SCH-S 表級別的鎖,不需要頁鎖或行鎖。 也就是說,SQL Server數(shù)據(jù)庫引擎使用行版本控制來呈現(xiàn)每個語句,其中包含在語句開始時存在的數(shù)據(jù)的事務(wù)一致性快照。 不使用鎖來防止其他事務(wù)更新數(shù)據(jù)。 用戶定義的函數(shù)可以返回在包含 UDF 的語句開始后提交的數(shù)據(jù)。
如果 READ_COMMITTED_SNAPSHOT 數(shù)據(jù)庫選項設(shè)置為 OFF(這是默認設(shè)置),當前事務(wù)運行讀取操作時,已提交讀隔離使用共享鎖來防止其他事務(wù)修改行。 共享鎖還會阻止語句在其他事務(wù)完成之前讀取由這些事務(wù)修改的行。 兩個實現(xiàn)都滿足已提交讀隔離的 ISO 定義。

快照

快照隔離級別使用行版本控制來提供事務(wù)級別的讀取一致性。 讀取操作不獲取頁鎖或行鎖,只獲取 SCH-S 表鎖。 讀取其他事務(wù)修改的行時,讀取操作將檢索啟動事務(wù)時存在的行的版本。 當 ALLOW_SNAPSHOT_ISOLATION 數(shù)據(jù)庫選項設(shè)置為 ON 時,只能對數(shù)據(jù)庫使用快照隔離。 默認情況下,用戶數(shù)據(jù)庫的此選項設(shè)置為 OFF。

參考鏈接:https://www.cnblogs.com/xiongze520/p/14821536.html
https://docs.microsoft.com/zh-cn/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-server-ver16



  業(yè)務(wù)實施流程

需求調(diào)研 →

團隊組建和動員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡(luò)部署 →

系統(tǒng)部署試運行 →

系統(tǒng)正式上線 →

合作協(xié)議

系統(tǒng)開發(fā)/整合

制作文檔和員工培訓

售后服務(wù)

馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生