1. 程式人生 > >十分鐘瞭解PHP事務

十分鐘瞭解PHP事務

資料庫事務四特性

原子

全部成功,或者全部失敗

一致

比如:A和B的錢是1000元,無論他們之間如何轉,總數還是1000元

隔離

當多個使用者併發訪問資料庫,如操作同一表,資料庫為每個使用者單獨開啟事務,不能被其它事務的操作干擾,多個併發事務之間要互相隔離。

持久

事務一旦被提交,那麼對資料庫的資料改變是永久的,即使資料庫系統故障也不會丟失提交事務的操作。

併發操作幾個問題

髒讀

事務處理時讀取了另一個未提交的事務的資料。 如B的餘額為0元,A轉賬給B一萬元,但是還沒有提交成功。這時候,B手機支付一萬元,讀取到A轉賬的一萬元,並進行了扣款。讀到的一萬元就是髒資料。因為A可能會撤銷轉賬操作。

不可重複讀

事務多次查詢某資料但是返回值不同。因為在查詢間隔期間,改資料被其它事務修改了。

幻讀

發生於事務非獨立執行。如一個數據值原為2,A對某資料複製為1,B又對其賦值為2,A再次檢視改資料時,發現還是為2。

四種隔離

資料庫事務隔離有四種

未提交讀

可以讀取到未提交的資料,會產生髒讀。

提交讀

一個事務提交後,其餘事務才會讀取到該事務的資料

重複讀

開始讀取資料(事務開啟)時,不再允許修改操作。MySQL預設是這種。

序列化

是最高的事務隔離級別,事務序列化執行,可以避免髒讀、不可重複讀與幻讀。但是這種效率低下,比較消耗資料庫記憶體效能,一般不使用。