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