天天看點

Mysql事務詳解(二)事務的隔離性和容易引起的問題

上一篇講到事務的四大特性,其中有一個是事務的隔離性,即兩個事物之間不會互相影響,為了實作這樣的功能,就引入了事務的隔離性。

事務的隔離性

為了保證事務的隔離性,自然我們可以把事務設計成單線程的,這樣的話效率就會極其低下,為了保證隔離性,又不失效率我們把喪失隔離性的情況分為三種。

髒讀:讀到另一個未送出事務的資料

幻讀:在一個事務過程中已經讀取了一次表,此時恰巧另一個事務commit,導緻這次事務再一次讀取表時前後不一緻。(表影響)

不可重複讀:在一個事務過程中已經讀取了一次a資料,此時恰巧另一個事務commit,導緻這次事務再一次讀取a資料時前後不一緻。(行影響)

針對這三種情況推出了四大隔離級别

   四大隔離級别:

                Read uncommitted -- 不防止任何隔離性問題,具有髒讀/不可重複度/虛讀(幻讀)問題

                Read committed -- 可以防止髒讀問題,但是不能防止不可重複度/虛讀(幻讀)問題(mysql預設)

                Repeatable read -- 可以防止髒讀/不可重複讀問題,但是不能防止虛讀(幻讀)問題

                Serializable -- 資料庫被設計為單線程資料庫,可以防止上述所有問題

這四大隔離級别,安全性遞增。效率遞減