標籤:持久性 資料庫 事務
事務是什麼
一個大的處理單元,包含多項操作,涉及多次cpu和io操作,這些操作同時完成或同時不完成,即這個大的處理單元中的操作是一個整體,只有全部執行完畢,才進行提交。一般啟動事務的是SQL語句,或是ODBC中專門啟動事務的語句
事務的性質(應遵循的規則,ACID)
原子性(Atomicity):整個事務中的所有操作,要麼全部完成,要麼全部不完成,不能停滯在中間某個環節,整個事務的所有操作是不可分割的,所以事務在執行過程中若發生錯誤,應復原到事務開始前的狀態,就像這個事務從來沒有執行過一樣
一致性(Consistency):事務執行必定會引起資料庫狀態改變,一致性表示,事務開始到事務結束,資料庫的整體狀態是沒有改變的
隔離性(Isolation):事務並存執行時,確保每一事務在系統中認為只有該事務在使用系統,事務彼此間互不影響
持久性(Durability):在事務完成以後,該事務所對資料庫所作的更改會持久的儲存在資料庫之中,通過寫入記錄檔當中
交易記錄:
事務記錄到交易記錄檔中,最後再寫入磁碟中(例如DELECT操作,有四個語句,四個語句執行都是在記憶體中完成,並且先記錄到日誌中,當整個操作完成,再從記錄檔對資料檔案進行修改)所以每個事務執行過程中都要寫入兩遍,一遍到日誌,一遍到真實檔案(日誌記錄的是操作過程,而非操作本身)
事務並發執行時需要進行並發控制,加鎖是其中一種方式,也是一種重要的機制
鎖分類
鎖粒度:鎖粒度從大到小,粒度越細越能實現並發性,但實現機制越複雜
(mysql server僅支援表級鎖,行鎖需要儲存引擎完成)
隔離等級:由低到高,隔離等級越高,並發能力越低
READ UNCOMMITTED:讀未提交:所有事務都可以看到其他事務操作結果,各種混亂
READ COMMITTED:讀提交:事務在其他事務操作完提交後,才能看到其他事務的操作(我讀了一次,再次讀的時候已經被別人提交了,兩次讀的不一樣)
REPATABLE READ:可重讀:事務第一次讀到什麼,一直到提交的時候都是那樣,即使其他事務在這個過程中對相同的內容操作並提交,也不會改變本事務讀到的東西(提交後發現應該是10行現在變成了5行,可能別人在你沒提交的時候修改並提交了)(mysql預設)
SERIALIZABLE:可串列,簡單地說,事務不可同時執行
本文出自 “Call me Boxin” 部落格,請務必保留此出處http://boxinknown.blog.51cto.com/10435935/1677013
MySQL事務和隔離等級