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