日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库事务以及事务的隔离级别

發布時間:2025/3/20 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库事务以及事务的隔离级别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp45

[size=12px;]事務的四個屬性[/size]:原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)。
原子性(Atomic)
???? 最重要的原則,也是最容易理解的原則。被事務管理的所有方法,要么一起被提交,要么一起回滾。
一致性(Consistency)
???? 事務在系統完整性中實施一致性,如果事務成功地完成,那么系統中所有變化將正確地應用,系統處于新有效狀態。如果在事務中出現錯誤,那么系統中的所有變化將自動地回滾,系統返回到原始狀態。
隔離性(Isolation)
???? 在隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用于同一數據。重要的是,在隔離狀態執行事務,系統的狀態有可能是不一致的,在結束事務前,應確保系統處于一致狀態。但是在每個單獨的事務中,系統的狀態可能會發生變化。如果事務不是在隔離狀態運行,它就可能從系統中訪問數據,而系統可能處于不一致狀態。通過提供事務隔離,可以阻止這類事件的發生。
持久性(Durability)
???? 持久性意味著一旦事務執行成功,在系統中產生的所有變化將是永久的。應該存在一些檢查點防止在系統失敗時丟失信息。甚至硬件本身失敗,系統的狀態仍能通過在日志中記錄事務完成的任務進行重建。

數據庫鎖概念:
???? 在數據庫中有兩種基本的鎖類型:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當數據對象被加上排它鎖時,其他的事務不能對它讀取和修改。加了共享鎖的數據對象可以被其他事務讀取,但不能修改。數據庫利用這兩種基本的鎖類型來對數據庫的事務進行并發控制。
???? 從程序員的角度看,鎖分為以下兩種類型:
???? 1.樂觀鎖(Optimistic Lock)
???? 樂觀鎖假定在處理數據時,不需要在應用程序的代碼中做任何事情就可以直接在記錄上加鎖、即完全依靠數據庫來管理鎖的工作。一般情況下,當執行事務處理時SQL Server會自動對事務處理范圍內更新到的表做鎖定。
???? 2.悲觀鎖(Pessimistic Lock)
???? 悲觀鎖對數據庫系統的自動管理不感冒,需要程序員直接管理數據或對象上的加鎖處理,并負責獲取、共享和放棄正在使用的數據上的任何鎖。


???? 一個事務必須與其它事務進行隔離的程度。較低的隔離級別可以增加并發,但代價是降低數據的正確性。相反,較高的隔離級別可以確保數據的正確性,但可能對并發產生負面影響。

數據庫并發操作存在的異常情況:
1. 更新丟失(Lost update):兩個事務都同時更新一行數據但是第二個事務卻中途失敗退出導致對數據兩個修改都失效了這是系統沒有執行任何鎖操作因此并發事務并沒有被隔離開來(可以不進行考慮,學習優先級地)

[size=12px;]3. [/size]不可重復讀取(Non-repeatable Reads):是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那么,在第一個事務中的兩 次讀數據之間,由于第二個事務的修改,那么第一個事務兩次讀到的的數據可能是不一樣的。這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱為是不 可重復讀。例如,一個編輯人員兩次讀取同一文檔,但在兩次讀取之間,作者重寫了該文檔。當編輯人員第二次讀取文檔時,文檔已更改。原始讀取不可重復。如果 只有在作者全部完成編寫后編輯人員才可以讀取文檔,則可以避免該問題。

[size=12px;]5. [/size]幻讀(Phantom Reads):也稱為幻像(幻影)。是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。 同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那么,以后就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象 發生了幻覺一樣。例如,一個編輯人員更改作者提交的文檔,但當生產部門將其更改內容合并到該文檔的主復本時,發現作者已將未編輯的新材料添加到該文檔中。 如果在編輯人員和生產部門完成對原始文檔的處理之前,任何人都不能將新材料添加到文檔中,則可以避免該問題。

[size=12px;][size=12px;]1.[/size][size=12px;]未授權讀取(Read Uncommitted):也稱[size=12px;]未提交讀[/size][size=12px;],[/size][/size][size=12px;][size=12px;]會出現臟讀、不可重復讀、幻讀 ( 隔離級別最低,并發性能高 )[/size][/size][size=12px;]。([/size][size=12px;][size=12px;]在讀數據時不會檢查或使用任何鎖。因此,在這種隔離級別中可能讀取到沒有提交的數據。[/size][/size][size=12px;])允許臟讀取但不允許更新丟失,如果一個事務已經開始寫數據則另外一個數據則不允許同時進行寫操作但允許其他事務[size=12px;]讀此行數據[/size]。該隔離級別可以通過“排他寫鎖”實現。[/size][size=12px;]事務隔離的最低級別[/size][size=12px;],僅可保證不讀取物理損壞的數據。它允許讀取已經被其它用戶修改但尚未提交確定的數據。[/size][/size]

[size=12px;]3. [/size]可重復讀取(Repeatable Read):禁止不可重復讀取和臟讀取,會出幻讀(鎖定所讀取的所有行)。但是有時可能出現幻影數據,這可以通過“共享讀鎖”和“排他寫鎖”實現,讀取數據事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。在此隔離級下,用SELECT 命令讀取的數據在整個命令執行過程中不會被更改。此選項會影響系統的效能,非必要情況最好不用此隔離級。


總結

以上是生活随笔為你收集整理的数据库事务以及事务的隔离级别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。