髒讀
事務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;