十分鐘瞭解PHP事務
阿新 • • 發佈:2018-12-11
資料庫事務四特性
原子
全部成功,或者全部失敗
一致
比如:A和B的錢是1000元,無論他們之間如何轉,總數還是1000元
隔離
當多個使用者併發訪問資料庫,如操作同一表,資料庫為每個使用者單獨開啟事務,不能被其它事務的操作干擾,多個併發事務之間要互相隔離。
持久
事務一旦被提交,那麼對資料庫的資料改變是永久的,即使資料庫系統故障也不會丟失提交事務的操作。
併發操作幾個問題
髒讀
事務處理時讀取了另一個未提交的事務的資料。 如B的餘額為0元,A轉賬給B一萬元,但是還沒有提交成功。這時候,B手機支付一萬元,讀取到A轉賬的一萬元,並進行了扣款。讀到的一萬元就是髒資料。因為A可能會撤銷轉賬操作。
不可重複讀
事務多次查詢某資料但是返回值不同。因為在查詢間隔期間,改資料被其它事務修改了。
幻讀
發生於事務非獨立執行。如一個數據值原為2,A對某資料複製為1,B又對其賦值為2,A再次檢視改資料時,發現還是為2。
四種隔離
資料庫事務隔離有四種
未提交讀
可以讀取到未提交的資料,會產生髒讀。
提交讀
一個事務提交後,其餘事務才會讀取到該事務的資料
重複讀
開始讀取資料(事務開啟)時,不再允許修改操作。MySQL預設是這種。
序列化
是最高的事務隔離級別,事務序列化執行,可以避免髒讀、不可重複讀與幻讀。但是這種效率低下,比較消耗資料庫記憶體效能,一般不使用。