MySQL事務和隔離等級

來源:互聯網
上載者:User

標籤:持久性   資料庫   事務   

事務是什麼

    一個大的處理單元,包含多項操作,涉及多次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事務和隔離等級

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.