MySQL事務隔離

2021-09-23 06:13:07 字數 1039 閱讀 6720

髒讀

事務a更新了資料但是並未提交,事務b查詢到事務a更新的資料,事務a此時執行回滾操作,事務b讀到的資料是髒資料。

不可重複讀

事務a多次讀取同一資料。事務b在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時,結果不一樣。

幻讀事務a多次讀取一組資料。事務b在事務a多次讀取的過程中,對資料作了插入或刪除,然後提交。導致事務a多次讀取的一組資料時,結果並不相同,好像出現了幻覺。

mysql的四種事務隔離:

讀未提交 (read-uncommitted)

讀已提交 (read-committed):解決了髒讀

可重複讀 (repeatable-read):解決不可重複讀。事務a多次讀取同一資料,即使其他事務在此期間對資料更新並提交,事務a依然會讀取到相同資料。

.序列化 (serializable):解決了幻讀。事務隔離級別為序列化時,讀寫資料都會鎖住整張表,影響效能。

注意:mysql預設的隔離級別是repeatable-read,可更改為read-committed

在/etc/mysql/mysql.con.d/mysqld.cnf檔案中配置

transaction-isolation=read-committed
重啟mysql服務

sudo service mysql restart
檢視mysql事務隔離級別

檢視當前會話隔離級別

select @@tx_isolation;
檢視當前資料庫隔離級別

select @@global.tx_isolation;
隔離級別

髒讀不可重複讀

幻讀讀未提交(read uncommitted)是是

是讀已提交(read committed)否是

是可重複讀(repeatable-read)否否

是可序列化(serializable)否否

mysql事務隔離最高 Mysql事務隔離級別

mysql官方文件顯示 innodb中每個隔離級別的詳細描述如下 read uncommitted select語句以非鎖定方式被執行,但是乙個可能更早期版本的記錄會被用到。因此,使用這個隔離級別,比如,讀是不連貫的。著也被稱為 髒讀 dirty read 另外,這個隔離級別象read commit...

MySQL 事務隔離

未提交讀 read uncommitted 允許髒讀,也就是可能讀取到其他會話中未提交事務修改的資料 提交讀 read committed 只能讀取到已經提交的資料。oracle等多數資料庫預設都是該級別 不重複讀 可重複讀 repeated read 可重複讀。在同乙個事務內的查詢都是事務開始時刻...

Mysql 事務隔離

1 事務的特性 原子性 一致性 隔離性 永續性 2 多事務同時執行的時候,可能會出現的問題 髒讀 不可重複讀 幻讀 3 事務隔離級別 讀未提交 讀提交 可重複讀 序列化 4 不同事務隔離級別的區別 讀未提交 乙個事務還未提交,它所做的變更就可以被別的事務看到 讀提交 乙個事務提交之後,它所做的變更才...