1. 程式人生 > 其它 >MySQL: Mysql 事務隔離級別

MySQL: Mysql 事務隔離級別

資料併發訪問(瞭解)

一個數據庫可能擁有多個訪問客戶端,這些客戶端都可以併發方式訪問資料庫.

資料庫的相同資料可能被 多個事務同時訪問,如果不採取隔離措施,就會導致各種問題, 破壞資料的完整性

併發訪問會產生的問題

事務在操作時的理想狀態: 所有的事務之間保持隔離,互不影響。

因為併發操作,多個使用者同時訪問同 一個 資料。可能引發併發訪問的問題

併發訪問 的問題 說明
髒讀 一個事務讀取到了另一個事務中尚未提交的資料
不可重複 讀 一個事務中兩次讀取的資料內容不一致, 要求的是在一個事務中多次讀取時資料是一 致的. 這是進行 update 操作時引發的問題
幻讀

一個事務中,某一次的 select 操作得到的結果所表徵的資料狀態, 無法支撐後續的業務 操作.

查詢得到的資料狀態不準確,導致幻讀.

四種隔離級別

通過設定隔離級別,可以防止上面的三種併發問題. MySQL資料庫有四種隔離級別 上面的級別最低,下面 的級別最高。

  ✔ 會出現問題

  ✘ 不會出現問題

級 別 名字 隔離級別 髒 讀 不可重複 讀 幻 讀 資料庫的預設隔離級 別
1 讀未提 交 read uncommitted
2 讀已提 交 read committed Oracle和SQLServer
3 可重複 讀 repeatable read MySql
4 序列化 serializable

隔離級別相關命令

1) 檢視隔離級別

select @@tx_isolation;

2) 設定事務隔離級別,需要退出 MySQL 再重新登入才能看到隔離級別的變化

set global transaction isolation level 級別名稱;
read uncommitted 讀未提交
read committed 讀已提交
repeatable read 可重複讀
serializable 序列化

例如: 修改隔離級別為 讀未提交

set global transaction isolation level read uncommitted;