在數據庫中,事務隔離是非常重要的,特別是在并發讀寫的情況下。MySQL通過提供四種事務隔離級別來滿足不同的需求。
四種隔離級別分別是:
Read uncommitted(讀未提交)
Read committed(讀提交)
Repeatable read(可重復讀)
Serializable(串行化)
下面我們來逐個了解這四種隔離級別。
Read uncommitted(讀未提交)這一級別是最低的,也就是說,在這種隔離級別下,即使其他事務還未提交,當前事務也能讀取到其他事務已經修改但還未提交的數據。這種隔離級別對事務的完整性和可重復性影響很大,因此,不建議使用這種級別。
Read committed(讀提交)是MySQL默認的隔離級別。在這種級別下,當前事務只能讀取到已經提交的數據,可以避免“臟讀”現象的發生,但仍然會出現“不可重復讀”、“幻讀”等問題。
Repeatable read(可重復讀)是比Read committed更為嚴格的一個隔離級別,該級別下,讀取到的數據和當前事務初次讀取到該數據時是一致的,事務執行期間只能讀到其自身已讀取過的數據,除非重新發起新的查詢。可重復讀會引起“幻讀”,即多次執行一個查詢但由于數據記錄在事務期間被其他事務修改,因此查詢結果不同。
Serializable(串行化)是最高的隔離級別,也是最嚴格的一種隔離級別。該級別下,事務之間完全隔離,同一時間只能有一個事務訪問數據,可以避免臟讀、不可重復讀、幻讀等問題,但會嚴重影響數據庫的并發性能,因為多個事務會因為爭奪同一數據而互相阻塞。
上一篇mysql實現倉庫管理