ACID,事務(wù)應(yīng)該具有的四個屬性
Atomicity(原子性),一個事務(wù)是一個不可分割的工作單位,事務(wù)中包括的各個操作要么都做,要么都不做Consistency(一致性),事務(wù)必須是使數(shù)據(jù)庫從一個一致性狀態(tài)轉(zhuǎn)變到另一個一致性狀態(tài)。一致性與原子性是密切相關(guān)的Isolation(隔離型),一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間是不能相互干擾的Durability(持久性),一個事務(wù)一旦提交,他對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的。接下來的其他操作或故障不應(yīng)該對其有任何影響
事務(wù)的并發(fā)問題
臟讀:事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的數(shù)據(jù)就是臟數(shù)據(jù)不可重復(fù)讀:事務(wù)A多次讀取同一數(shù)據(jù),事務(wù)B在事務(wù)A多次讀取的過程中,對數(shù)據(jù)做了更新操作并提交,導(dǎo)致事務(wù)A多次讀取同一條數(shù)據(jù)的結(jié)果不一致幻讀:事務(wù)A首先根據(jù)條件索引得到N條數(shù)據(jù),然后事務(wù)B改變了這N條數(shù)據(jù)之外的M條或者增添了M條符合事務(wù)A搜索條件的數(shù)據(jù),導(dǎo)致事務(wù)A再次搜索發(fā)現(xiàn)有N+M條數(shù)據(jù)了,就產(chǎn)生了幻讀。
事務(wù)的隔離級別
-
未提交讀(read uncommited)臟讀- 事務(wù)中的修改,即使沒有提交,其他事務(wù)也可以看得到,會導(dǎo)致“臟讀”、“幻讀”和“不可重復(fù)讀取”。
-
已提交讀(read comited)不可重復(fù)讀- 大多數(shù)主流數(shù)據(jù)庫的默認(rèn)事務(wù)等級,保證了一個事務(wù)不會讀到另一個并行事務(wù)已修改但未提交的數(shù)據(jù),避免了臟讀,但是不能避免幻讀和不可重復(fù)讀。
-
可重復(fù)讀(repeatable read)- 保證了一個事務(wù)不會修改已經(jīng)由另一個事務(wù)讀取但未提交的數(shù)據(jù)。避免臟讀和不可重復(fù)讀的問題,但是不能避免幻讀。
-
串行化(serializable)- 最嚴(yán)格的級別,事務(wù)串行執(zhí)行,資源消耗最大

事務(wù)隔離級別