更新時間:2021-01-04 17:57:26 來源:動力節點 瀏覽1326次
MySQL是一個關系型數據庫管理系統,在技術面試和筆試中經常會考到數據庫事務相關的知識。在MySQL中,InnoDB和BDB都支持事務處理,各自事務處理的特點不一。本文我們重點來討論MySQL事務處理的相關知識。
1、事務的ACID特性
事務是由一組SQL語句組成的邏輯處理單元,事務具有以下4個屬性,通常簡稱為事務的ACID屬性。
(1)原子性(Atomicity):事務是一個原子操作單元,其對數據的修改,要么全都執行,要么全都不執行。
(2)一致性(Consistent):在事務開始和完成時,數據都必須保持一致狀態。這意味著所有相關的數據規則都必須應用于事務的修改,以保持數據的完整性;事務結束時,所有的內部數據結構(如B樹索引或雙向鏈表)也都必須是正確的。
(3)隔離性(Isolation):數據庫系統提供一定的隔離機制,保證事務在不受外部并發操作影響的“獨立”環境執行。這意味著事務處理過程中的中間狀態對外部是不可見的,反之亦然。
(4) 持久性(Durable):事務完成之后,它對于數據的修改是永久性的,即使出現系統故障也能夠保持。
2、事務處理帶來的相關問題
由于事務的并發執行,帶來以下一些著名的問題:
(1)更新丟失(Lost Update):當兩個或多個事務選擇同一行,然后基于最初選定的值更新該行時,由于每個事務都不知道其他事務的存在,就會發生丟失更新問題--最后的更新覆蓋了由其他事務所做的更新。
(2)臟讀(Dirty Reads):一個事務正在對一條記錄做修改,在這個事務完成并提交前,這條記錄的數據就處于不一致狀態;這時,另一個事務也來讀取同一條記錄,如果不加控制,第二個事務讀取了這些“臟”數據,并據此做進一步的處理,就會產生未提交的數據依賴關系。這種現象被形象地叫做"臟讀"。
(3)不可重復讀(Non-Repeatable Reads):一個事務在讀取某些數據后的某個時間,再次讀取以前讀過的數據,卻發現其讀出的數據已經發生了改變、或某些記錄已經被刪除了!這種現象就叫做“不可重復讀”。
(4)幻讀(Phantom Reads):一個事務按相同的查詢條件重新讀取以前檢索過的數據,卻發現其他事務插入了滿足其查詢條件的新數據,這種現象就稱為“幻讀”。
3、事務的隔離性
SQL2標準定義了四個隔離級別。定義語句如下:
SET TRANSACTION ISOLATION LEVEL
[READ UNCOMMITTED |
READ COMMITTED |
REPEATABLE READ |
SERIALIZABLE ]
這與Jim Gray所提出的隔離級別有點差異。其中READ UNCOMMITTED即Jim的10(瀏覽);READ COMMITTED即20,游標穩定性;REPEATABLE READ為2.99990隔離(沒有幻像保護);SERIALIZABLE隔離級別為30,完全隔離。SQL2標準默認為完全隔離(30)。各個級別存在問題如下:
各個具體數據庫并不一定完全實現了上述4個隔離級別,例如,Oracle只提供READ COMMITTED和Serializable兩個標準隔離級別,另外還提供自己定義的Read only隔離級別;SQL Server除支持上述ISO/ANSI SQL92定義的4個隔離級別外,還支持一個叫做“快照”的隔離級別,但嚴格來說它是一個用MVCC實現的Serializable隔離級別。MySQL 支持全部4個隔離級別,其默認級別為Repeatable read,但在具體實現時,有一些特點,比如在一些隔離級別下是采用MVCC一致性讀。國產數據庫DM也支持所有級別,其默認級別為READ COMMITTED。
mysql事務的ACID特性是mysql事務的基本知識,也就是我們經常說的mysql事務的四大特性。理論知識看起來似乎都很簡單,但真正要去理解透徹還是需要一些指導和案例支持的,在本站的MySQL教程中有著完美的引導學習方式,帶我們輕松掌握MySQL事務的相關知識。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習