MYSQL事務隔離級別

2021-09-11 19:52:22 字數 1088 閱讀 7554

在 mysql 中,事務支援是在引擎層實現的,今天我們就隔離性談談,首先我們要知道的一點就是事務隔離的越好效率就越低,所以在實際開發的過程中我們你需要根據需求自己判斷採用哪種隔離級別。mysql事務隔離級別包括讀未提交(read uncommitted)、讀提交(read-committed)、可重複讀(repeatable-read)、序列化(serializable),下面我們舉乙個例子就實際場景分別談談,如下圖v1是mysql中的乙個欄位的值初始值為test:

乙個事務未提交時,他做的改變就可以被其他的事務看到

這時我們在事務一中查詢值為初始值test,事務二中第一次查詢為test1(雖然事務一未提交但是事務二中可以看到事務一中未提交的),第二次查詢為test1,第三次查詢為test1。

乙個事務提交後,它做的改變才能被其他的事務看到

這時我們在事務一中查詢值為初始值test,事務二中第一次查詢為test(因為此時事務二只能看到事務一中已經提交的),第二次查詢為test1,第三次查詢為test1。

乙個事務執行過程中看到的資料,總是跟這個事務在啟動時看到的資料是一致的

這時我們在事務一中查詢值為初始值test,事務二中第一次查詢為test,第二次查詢為test(可重複讀的過程中兩次讀取的結果相同),第三次查詢為test1。

同一行記錄,「寫」會加「寫鎖」,「讀」會加「讀鎖」。當出現讀寫鎖衝突的時候後乙個訪問的事務必須等前乙個事務執行完畢

事務二的第一次查詢會被所住直到事務一提交。

上邊講了資料庫的幾種隔離級別,那麼mysql時如何達到這種隔離的呢:

序列化:讀寫的時候加鎖

讀未提交:直接返回最新值

讀提交:在每個sql語句執行時候建立試圖,當執行本事務的語句的時候,讀取試圖的內容,將資料回滾到相應的時刻

可重複讀:事務啟動的時候建立試圖,當執行本事務的語句的時候,讀取試圖的內容,將資料回滾到相應的時刻

回滾日誌會在最早的事務結束的時候將此事務之前的所有日誌刪除,所以在mysql中盡量不要使用長事務,長事務意味著在你的讀提交和可重複度中會存在很老的試圖,導致回滾日誌無法刪除占用大量資源。

mysql隔離級別 MySQL 事務隔離級別

mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...

MySQL事務隔離級別

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...

Mysql 事務隔離級別

mysql 5.5預設儲存引擎 表型別 使用的是innodb,它是支援acid特性的 acid,指資料庫的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫系統,必需要具有這四種特性,否...