上一篇講到事務的四大特性,其中有一個是事務的隔離性,即兩個事物之間不會互相影響,爲了實現這樣的功能,就引入了事務的隔離性。
事務的隔離性
爲了保證事務的隔離性,自然我們可以把事務設計成單線程的,這樣的話效率就會極其低下,爲了保證隔離性,又不失效率我們把喪失隔離性的情況分爲三種。
髒讀:讀到另一個未提交事務的數據
幻讀:在一個事務過程中已經讀取了一次表,此時恰巧另一個事務commit,導致這次事務再一次讀取表時前後不一致。(表影響)
不可重複讀:在一個事務過程中已經讀取了一次a數據,此時恰巧另一個事務commit,導致這次事務再一次讀取a數據時前後不一致。(行影響)
針對這三種情況推出了四大隔離級別
四大隔離級別:
Read uncommitted -- 不防止任何隔離性問題,具有髒讀/不可重複度/虛讀(幻讀)問題
Read committed -- 可以防止髒讀問題,但是不能防止不可重複度/虛讀(幻讀)問題(mysql默認)
Repeatable read -- 可以防止髒讀/不可重複讀問題,但是不能防止虛讀(幻讀)問題
Serializable -- 數據庫被設計爲單線程數據庫,可以防止上述所有問題
這四大隔離級別,安全性遞增。效率遞減