mysql隔離級別的說明

2021-09-01 09:09:35 字數 1293 閱讀 8175

原子性、一致性、隔離性、永續性

多事物同時執行的時候可能會出現髒讀、不可重複讀、幻讀

事物的隔離級別

讀未提交(read uncommitted)會出現髒讀 一般用的非常少

讀提交(read committed)

可重複讀(repeatable read)

序列化(serializable )用的很少 嚴重影響資料庫效能

讀未提交乙個事務還沒提交時,它做的變更就能其它事物看到

讀提交個事務提交之後,它做的變更才會被其他事務看到

可重複讀是指乙個事務執行過程中看到的資料,總是跟這個事務在啟動時看到的資料是一致的 不可見

也可以這樣理解 每個事務啟動的時候打乙個快照,別人改的「我不聽我不聽

不可避免出現幻讀(比如 拿這個主鍵查的時候沒有記錄,當插入時發現有記錄了---另乙個事物插入的,見鬼了出現幻覺了嗎 叫幻讀)

序列化:加鎖事物序列化

事務隔離的實現:

每條記錄在更新的時候都會同時記錄一條回滾操作

同一條記錄在系統中可以存在多個版本,這就是資料庫的多版本併發控制(mvcc)。

回滾日誌的刪除 系統會判斷當沒有事務需要用到這些回滾日誌的時候,回滾日誌才會刪除

長事務意味著系統裡面會存在很老的事務檢視 ,在這個事務提交之前,回滾記錄都要保留,這會導致大量占用儲存空間。除此之外,長事務還占用鎖資源,可能會拖垮庫

注意

在開發過程中,盡可能的減小事務範圍,少用長事務,如果無法避免,保證邏輯日誌空間足夠用,並且支援動態日誌空間增長。監控innodb_trx表,發現長事務報警。

事務啟動方式:一、顯式啟動事務語句,begin或者start transaction,提交commit,回滾rollback;二、set autocommit=0,該命令會把這個執行緒的自動提交關掉。這樣只要執行乙個select語句,事務就啟動,並不會自動提交,直到主動執行commit或rollback或斷開連線。

Mysql隔離級別的理解

1 read uncommitted 讀取未提交 查詢時可以查詢到沒有提交的資料,導致髒讀 2 read committed 讀取提交內容 前一次查詢和後一次查詢中資料間有被增刪改,導致查詢資料不一致,導致不可重複讀,但不能讀取到未提交的資料 3 repeatable read 可重複讀 會導致幻讀...

MySQL事務隔離級別的型別

1.事務隔離級別型別以及序列化介紹 事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干擾,多個併發事務之間要相互隔離。在併發下事務會容易出現一些問題 髒讀 乙個事務開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,...

MySQL事務隔離級別的實現原理

在mysql的眾多儲存引擎中,只有innodb支援事務,所有這裡說的事務隔離級別指的是innodb下的事務隔離級別。讀未提交 乙個事務可以讀取到另乙個事務未提交的修改。這會帶來髒讀 幻讀 不可重複讀問題。基本沒用 讀已提交 乙個事務只能讀取另乙個事務已經提交的修改。其避免了髒讀,但仍然存在不可重複讀...