PHP事務四大特性
事務就是一組原子性的SQL查詢,或者說一個獨立的工作單元。
原子性(Atomicity):
事務是數據庫的邏輯工作單位,它對數據庫的修改要么全部執行,要么全部不執行。
一致性(Consistemcy):
事務前后,數據庫的狀態都滿足所有的完整性約束。
隔離性(Isolation):
并發執行的事務是隔離的,一個不影響一個。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用于同一數據。
通過設置數據庫的隔離級別,可以達到不同的隔離效果。
持久性(Durability):
在事務完成以后,該事務所對數據庫所作的更改便持久的保存在數據庫之中,并不會被回滾。
PHP事務的并發問題
1、臟讀
事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據。
2、不可重復讀
事務 A 多次讀取同一數據,事務 B 在事務A多次讀取的過程中,對數據作了更新并提交,導致事務A多次讀取同一數據時,結果 不一致。
3、幻讀
系統管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束后發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。
小結:不可重復讀的和幻讀很容易混淆,不可重復讀側重于修改,幻讀側重于新增或刪除。解決不可重復讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表。
推薦教程:PHP視頻教程