mysql事務-mysql45講-打卡活動

1.數據庫ACID

A 原子性(Atomicity):mysql中用了鎖機制來保證了原子性,有悲觀鎖和樂觀鎖,悲觀鎖是鎖了整個表或庫,鎖庫時,一般是做數據遷移操作時,而且一般是鎖從庫,樂觀鎖的實現分兩種,一種是加for update 鎖住了行,還有一種是加了版本號來實現
C 一致性(Consistency):mysql用了事務回滾機制,在行記錄裏,記錄了回滾指針和事務id(trx_id),利用了日誌文件來進行回滾(undo log)
I 隔離性(Isolation):設置了事務隔離級別,來隔離數據的可見性,在可重複讀下,利用MVCC機制
D 持久性(Durability):mysql利用了redo log和bin log來保證了數據不丟失,重啓後,可以根據redo log和bin log來恢復數據
 

2.mysql的事務隔離級別

1)讀未提交,一個事務讀到了另一個事務未提交的數據,假如另一個事務回滾,那會使數據錯誤,這也就是髒讀
2)讀已提交, 一個事務在讀取某些數據後的某個時間,再次讀取以前讀過的數據,卻發現其讀出的數據已經發生了改變、或某些記錄已經被刪除了
3)可重複讀,這個級別,對大部分場景是沒什麼問題的,但會產生幻讀的情況,比如 按相同的查詢條件重新讀取以前檢索過的數據,卻發現其他事務插入了滿足其查詢條件的新數據
4)串行化
 

3.mysql的鎖

mysql的鎖,除了剛剛說的悲觀鎖和樂觀鎖,還有表鎖和行鎖,間隙鎖,區間鎖,而間隙鎖是爲了能解決幻讀產生的問題,但又會影響插入數據的影響,所以,在實際項目中,要綜合考慮

4.MVCC
MVCC是多版本併發控制,這是爲了實現可重複讀,利用undo log日誌版本鏈,trx_id和 roll_pointer這兩個隱藏列,生成read view
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章