資料庫事務隔離級別
事務的特徵ACID中,I是指Isolation,隔離性,即併發事務之間相互影響的程度。當事務併發操作時,可能出現髒讀,不可重複讀,幻讀,而事務的隔離級別能夠相應的解決出現的問題。
髒讀:事務A修改了一個資料,但未提交,事務B讀到了事務A未提交的更新結果,如果事務A提交失敗,事務B讀到的就是髒資料。
不可重複讀:在同一個事務中,對於同一份資料讀取到的結果不一致。
事務B在事務A提交前讀到的結果,和提交後讀到的結果可能不同。
出現的原因就是事務併發修改記錄。
要避免這種情況,最簡單的方法就是對要修改的記錄加鎖,這回導致鎖競爭加劇,影響效能。
幻讀:在同一個事務中,同一個查詢多次返回的結果不一致。
事務A新增了一條記錄,事務B在事務A提交前後各執行了一次查詢操作,發現後一次比前一次多了一條記錄。
幻讀是由於併發事務增加記錄導致的
這個不能像不可重複讀通過記錄加鎖解決,因為對於新增的記錄根本無法加鎖。需要將事務序列化,才能避免幻讀。
事務的隔離級別從低到高有:
Read Uncommitted:最低的隔離級別,什麼都不需要做,一個事務可以讀到另一個事務未提交的結果。所有的併發事務問題都會發生。
Read Committed:只有在事務提交後,其更新結果才會被其他事務看見。可以解決髒讀問題。
Repeated Read:在一個事務中,對於同一份資料的讀取結果總是相同的,無論是否有其他事務對這份資料進行操作,以及這個事務是否提交。可以解決髒讀、不可重複讀。
Serialization:事務序列化執行,隔離級別最高,犧牲了系統的併發性。可以解決併發事務的所有問題。
隔離級別和解決的程度
隔離等級
髒讀
不可重複讀
幻讀
讀未提交
YES
YES
YES
讀已提交
NO
YES
YES
可重複讀
NO
NO
YES
序列化
NO
NO
NO
總結:
事務的提出主要是為了解決併發情況下保持資料一致性的問題。通過選用不同的隔離等級就可以在不同程度上避免事務處理中所面臨的各種問題。但是隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。對於多數應用程式,可以優先考慮把資料庫系統的隔離級別設為Read Committed,它能夠避免髒讀取,而且具有較好的併發效能。
相關文章
- 資料庫事務與隔離級別資料庫
- 資料庫事務及其隔離級別資料庫
- ORACLE資料庫事務隔離級別Oracle資料庫
- 資料庫事務與事務的隔離級別資料庫
- 聊聊資料庫的事務隔離級別資料庫
- Oracle資料庫事務隔離級別概述Oracle資料庫
- [資料庫]事務的4種隔離級別資料庫
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- 資料庫事務隔離級別分析----轉載資料庫
- 資料庫事務的四種隔離級別資料庫
- 資料庫系列:事務的4種隔離級別資料庫
- 資料庫事務隔離資料庫
- 資料庫事務的四大特性以及事務的隔離級別資料庫
- MySQL 事務隔離級別MySql
- PostgreSQL事務隔離級別SQL
- 事務、特性、隔離級別
- MySQL事務隔離級別MySql
- [Mysql]事務/隔離級別MySql
- 資料庫隔離級別資料庫
- 資料庫事務的隔離級別及四大特性資料庫
- 資料庫事務的四大特性和隔離級別資料庫
- 關係型資料庫的四種事務隔離級別資料庫
- KES資料庫實踐指南:探索KES資料庫的事務隔離級別資料庫
- MySQL事務的隔離級別MySql
- MySQL的事務隔離級別MySql
- 理解MySQL事務隔離級別MySql
- mysql修改事務隔離級別MySql
- Oracle-事務隔離級別Oracle
- JDBC 事務(一) 隔離級別JDBC
- 資料庫學習筆記:事務的特性和隔離級別資料庫筆記
- 資料庫事務併發產生的問題以及事務的隔離級別資料庫
- SqlServer事務詳解(事務隔離性和隔離級別詳解)SQLServer
- 論 MySQL 之事務隔離級別 | 資料庫篇MySql資料庫
- MySQL資料庫事務各隔離級別加鎖情況--Repeatable ReaMySql資料庫
- 資料庫事務隔離級別– 髒讀、幻讀、不可重複讀資料庫
- 資料庫事務與隔離級別示例(oracle與sql server對比)資料庫OracleSQLServer
- MySQL事務隔離級別和MVCCMySqlMVC
- 事務系統的隔離級別