浅谈事务
事務(wù):
?定義:所謂事務(wù),它是一個(gè)操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個(gè)不可分割的工作單位。
ACID:
?定義:是指在可靠數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,事務(wù)(transaction)所應(yīng)該具有的四個(gè)特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)
一。原子性:?原子性是指事務(wù)是一個(gè)不可再分割的工作單位,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生。
二。一致性:?一致性是指在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性約束沒有被破壞。這是說數(shù)據(jù)庫事務(wù)不能破壞關(guān)系數(shù)據(jù)的完整性以及業(yè)務(wù)邏輯上的一致性。
三。隔離性:多個(gè)事務(wù)并發(fā)訪問時(shí),事務(wù)之間是隔離的,一個(gè)事務(wù)不應(yīng)該影響其它事務(wù)運(yùn)行效果。
這指的是在并發(fā)環(huán)境中,當(dāng)不同的事務(wù)同時(shí)操縱相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有各自的完整數(shù)據(jù)空間。由并發(fā)事務(wù)所做的修改必須與任何其他并發(fā)事務(wù)所做的修改隔離。事務(wù)查看數(shù)據(jù)更新時(shí),數(shù)據(jù)所處的狀態(tài)要么是另一事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會(huì)查看到中間狀態(tài)的數(shù)據(jù)。
四。持久性:?意味著在事務(wù)完成以后,該事務(wù)所對(duì)數(shù)據(jù)庫所作的更改便持久的保存在數(shù)據(jù)庫之中,并不會(huì)被回滾。
1.事務(wù)之間的相互影響
???????事務(wù)之間的相互影響分為幾種,分別為:臟讀,不可重復(fù)讀,幻讀,丟失更新
???????臟讀意味著一個(gè)事務(wù)讀取了另一個(gè)事務(wù)未提交的數(shù)據(jù),而這個(gè)數(shù)據(jù)是有可能回滾的;
?不可重復(fù)讀
???? 不可重復(fù)讀意味著,在數(shù)據(jù)庫訪問中,一個(gè)事務(wù)范圍內(nèi)兩個(gè)相同的查詢卻返回了不同數(shù)據(jù)。這是由于查詢時(shí)系統(tǒng)中其他事務(wù)修改的提交而引起的。
幻讀(虛讀)
? ? ? ? 幻讀,是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。
丟失更新
???????兩個(gè)事務(wù)同時(shí)讀取同一條記錄,A先修改記錄,B也修改記錄(B是不知道A修改過),B提交數(shù)據(jù)后B的修改結(jié)果覆蓋了A的修改結(jié)果。
主意:
SQL Server隔離事務(wù)之間的影響是通過鎖來實(shí)現(xiàn)的,通過阻塞來阻止上述影響。不同的隔離級(jí)別是通過加不同的鎖,造成阻塞來實(shí)現(xiàn)的,所以會(huì)以付出性能作為代價(jià);安全級(jí)別越高,處理效率越低;安全級(jí)別越低,效率高。
SQL SERVER通過write-ahead transaction log來保證持久性。write-ahead transaction log的意思是,事務(wù)中對(duì)數(shù)據(jù)庫的改變?cè)趯懭氲綌?shù)據(jù)庫之前,首先寫入到事務(wù)日志中。而事務(wù)日志是按照順序排號(hào)的(LSN)。當(dāng)數(shù)據(jù)庫崩潰或者服務(wù)器斷點(diǎn)時(shí),重啟動(dòng)SQL SERVER,SQLSERVER首先會(huì)檢查日志順序號(hào),將本應(yīng)對(duì)數(shù)據(jù)庫做更改而未做的部分持久化到數(shù)據(jù)庫,從而保證了持久性。
總結(jié):
???????事務(wù)的(ACID)特性是由關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS,數(shù)據(jù)庫系統(tǒng))來實(shí)現(xiàn)的。數(shù)據(jù)庫管理系統(tǒng)采用日志來保證事務(wù)的原子性、一致性和持久性。日志記錄了事務(wù)對(duì)數(shù)據(jù)庫所做的更新,如果某個(gè)事務(wù)在執(zhí)行過程中發(fā)生錯(cuò)誤,就可以根據(jù)日志,撤銷事務(wù)對(duì)數(shù)據(jù)庫已做的更新,使數(shù)據(jù)庫退回到執(zhí)行事務(wù)前的初始狀態(tài)。
數(shù)據(jù)庫管理系統(tǒng)采用鎖機(jī)制來實(shí)現(xiàn)事務(wù)的隔離性。當(dāng)多個(gè)事務(wù)同時(shí)更新數(shù)據(jù)庫中相同的數(shù)據(jù)時(shí),只允許持有鎖的事務(wù)能更新該數(shù)據(jù),其他事務(wù)必須等待,直到前一個(gè)事務(wù)釋放了鎖,其他事務(wù)才有機(jī)會(huì)更新該數(shù)據(jù)。
轉(zhuǎn)載于:https://www.cnblogs.com/yiweiaimeng/p/4940500.html
總結(jié)
- 上一篇: oracle pl/sql之oracl
- 下一篇: 链接详解--共享库命名