mysql事務是指將資料庫從一種一致性狀態轉到另一種一致性狀態
mysql事務具有acid特性:
原子性(atomicity):事務中的所有操作,要麼全部執行,要麼都不執行
一致性(consistency):事務開始和結束後,資料庫的完整性不會被破壞
隔離性(isolation):事務之間互不影響。事務的隔離級別有四種:讀未提交、讀已提交、可重複讀(預設隔離級別)、序列化
永續性(durability):事務提交後,對資料的修改是永久性的,即使系統故障也不會丟失
mysql事務的隔離級別
讀未提交(read uncommited):即事務對資料庫資料所做的修改,在事務未提交之前,可以被其他事務看到。a事務對資料庫資料做的修改,在a事務未提交時,事務b可讀到a事務對資料所做的修改。
容易產生的問題:髒讀。由於事務b可讀到事務a所做的修改,但是a並沒有提交,如果事務a執行過程中發生異常回滾,則會導致事務b讀到的是錯誤資料,即髒資料
讀已提交(read commited):a、b兩個資料同時對資料庫中同一條資料做修改,a事務開啟,讀取資料,此時,b事務也開啟,讀取資料,並對資料做出修改,然後提交,此時事務a繼續執行,執行完後,再次讀取資料,發現兩次讀取的結果不一樣,由此產生不可重複讀的問題。
可重複讀(repeatable read):a事務讀取資料庫資料,在處理業務的過程中事務b讀取資料並修改完成後,事務a再次讀取資料時,所得結果和之前讀取的資料一致,並且事務a提交後,不會損害資料的一致性。原理是mysql使用了mvcc的版本控制機制,讀事物開始時,系統會給當前讀事物乙個版本號,讀事物後續讀取的版本號都會<=當前版本號,導致當前的讀事物無法讀取到資料的最新版本(這裡要說明一下,如果在b事物修改資料後a再修改資料並重新讀取資料,是可以讀取到最新的資料的)。可能產生的問題:幻讀。如:事務a開啟,讀取使用者x的age為15,b事務開啟age讀取使用者x的age並加1,此時使用者x的age為16,a事務再次讀取使用者x的資訊發現age還是15,a事物將x使用者的age+1,提交後,發現x使用者的age值為17.從使用者的角度來看,資料的一致性並沒有被破壞,但a事務可能將讀取到的資料15返回給使用者,導致幻讀。
序列化(serializable):表上的乙個事務開啟後,在該事務提交之前,其他事務不能對錶中的資料做任何修改。該隔離級別會鎖表。
MySQL事務機制
事務會把資料庫從一種一致狀態轉換為另一種狀態。在資料庫提交工作時,可以確保要麼所有修改都已經儲存了,要麼所有修改都不儲存。事務具有acid這四個特性,分別為原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 事務是由一條非常簡單的sq...
mysql事務機制
1 為什麼需要事務機制 避免寫入直接運算元據檔案,寫入直接運算元據檔案是一件非常危險的事情,遇到突發事故,沒有資料檔案對比無法還原。mysql五種日誌檔案,其中只有undo和redo日誌與事務有關。拷貝資料記錄在 redo日誌裡面,記錄修改記錄在undo日誌裡面。2 事務機制 事務是一組sql語句當...
MySQL事務機制
事務的acid屬性 原子性,一致性,隔離性,永續性 事務的原子性 乙個事務中所有的操作要麼全部完成,要麼全部失敗。事務執行後,不允許停留在中間某個狀態 事務的一致性 不管在任何給定的時間 併發事務有多少,事務必須保證執行結果的一致性。事務的隔離性 隔離性要求事務不受其他併發事務的影響,如同在給定的時...