日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[数据库事务与锁]详解一: 彻底理解数据库事务

發(fā)布時間:2025/4/16 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数据库事务与锁]详解一: 彻底理解数据库事务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

注明: 本文轉(zhuǎn)載自http://www.hollischuang.com/archives/898

事務(wù)

事務(wù)(Transaction),一般是指要做的或所做的事情。在計算機術(shù)語中是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。在計算機術(shù)語中,事務(wù)通常就是指數(shù)據(jù)庫事務(wù)。

概念

一個數(shù)據(jù)庫事務(wù)通常包含對數(shù)據(jù)庫進行讀或?qū)懙囊粋€操作序列。它的存在包含有以下兩個目的:

1、為數(shù)據(jù)庫操作提供了一個從失敗中恢復(fù)到正常狀態(tài)的方法,同時提供了數(shù)據(jù)庫即使在異常狀態(tài)下仍能保持一致性的方法。
2、當多個應(yīng)用程序在并發(fā)訪問數(shù)據(jù)庫時,可以在這些應(yīng)用程序之間提供一個隔離方法,以防止彼此的操作互相干擾。

當一個事務(wù)被提交給了DBMS(數(shù)據(jù)庫管理系統(tǒng)),則DBMS需要確保該事務(wù)中的所有操作都成功完成且其結(jié)果被永久保存在數(shù)據(jù)庫中,如果事務(wù)中有的操作沒有成功完成,則事務(wù)中的所有操作都需要被回滾,回到事務(wù)執(zhí)行前的狀態(tài)(要么全執(zhí)行,要么全都不執(zhí)行);同時,該事務(wù)對數(shù)據(jù)庫或者其他事務(wù)的執(zhí)行無影響,所有的事務(wù)都好像在獨立的運行。

但在現(xiàn)實情況下,失敗的風(fēng)險很高。在一個數(shù)據(jù)庫事務(wù)的執(zhí)行過程中,有可能會遇上事務(wù)操作失敗、數(shù)據(jù)庫系統(tǒng)/操作系統(tǒng)失敗,甚至是存儲介質(zhì)失敗等情況。這便需要DBMS對一個執(zhí)行失敗的事務(wù)執(zhí)行恢復(fù)操作,將其數(shù)據(jù)庫狀態(tài)恢復(fù)到一致狀態(tài)(數(shù)據(jù)的一致性得到保證的狀態(tài))。為了實現(xiàn)將數(shù)據(jù)庫狀態(tài)恢復(fù)到一致狀態(tài)的功能,DBMS通常需要維護事務(wù)日志以追蹤事務(wù)中所有影響數(shù)據(jù)庫數(shù)據(jù)的操作。

特性

并非任意的對數(shù)據(jù)庫的操作序列都是數(shù)據(jù)庫事務(wù)。事務(wù)應(yīng)該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(Atomicity):事務(wù)作為一個整體被執(zhí)行,包含在其中的對數(shù)據(jù)庫的操作要么全部被執(zhí)行,要么都不執(zhí)行。
一致性(Consistency):事務(wù)應(yīng)確保數(shù)據(jù)庫的狀態(tài)從一個一致狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€一致狀態(tài)。一致狀態(tài)的含義是數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)滿足完整性約束。
隔離性(Isolation):多個事務(wù)并發(fā)執(zhí)行時,一個事務(wù)的執(zhí)行不應(yīng)影響其他事務(wù)的執(zhí)行。
持久性(Durability):一個事務(wù)一旦提交,他對數(shù)據(jù)庫的修改應(yīng)該永久保存在數(shù)據(jù)庫中。

舉例

用一個常用的“A賬戶向B賬號匯錢”的例子來說明如何通過數(shù)據(jù)庫事務(wù)保證數(shù)據(jù)的準確性和完整性。熟悉關(guān)系型數(shù)據(jù)庫事務(wù)的都知道從帳號A到帳號B需要6個操作:

1、從A賬號中把余額讀出來(500)。
2、對A賬號做減法操作(500-100)。
3、把結(jié)果寫回A賬號中(400)。
4、從B賬號中把余額讀出來(500)。
5、對B賬號做加法操作(500+100)。
6、把結(jié)果寫回B賬號中(600)。

原子性:

保證1-6所有過程要么都執(zhí)行,要么都不執(zhí)行。一旦在執(zhí)行某一步驟的過程中發(fā)生問題,就需要執(zhí)行回滾操作。 假如執(zhí)行到第五步的時候,B賬戶突然不可用(比如被注銷),那么之前的所有操作都應(yīng)該回滾到執(zhí)行事務(wù)之前的狀態(tài)。

一致性

在轉(zhuǎn)賬之前,A和B的賬戶中共有500+500=1000元錢。在轉(zhuǎn)賬之后,A和B的賬戶中共有400+600=1000元。也就是說,數(shù)據(jù)的狀態(tài)在執(zhí)行該事務(wù)操作之后從一個狀態(tài)改變到了另外一個狀態(tài)。同時一致性還能保證賬戶余額不會變成負數(shù)等。

隔離性

在A向B轉(zhuǎn)賬的整個過程中,只要事務(wù)還沒有提交(commit),查詢A賬戶和B賬戶的時候,兩個賬戶里面的錢的數(shù)量都不會有變化。
如果在A給B轉(zhuǎn)賬的同時,有另外一個事務(wù)執(zhí)行了C給B轉(zhuǎn)賬的操作,那么當兩個事務(wù)都結(jié)束的時候,B賬戶里面的錢應(yīng)該是A轉(zhuǎn)給B的錢加上C轉(zhuǎn)給B的錢再加上自己原有的錢。

持久性

一旦轉(zhuǎn)賬成功(事務(wù)提交),兩個賬戶的里面的錢就會真的發(fā)生變化(會把數(shù)據(jù)寫入數(shù)據(jù)庫做持久化保存)!

原子性與隔離行

一致性與原子性是密切相關(guān)的,原子性的破壞可能導(dǎo)致數(shù)據(jù)庫的不一致,數(shù)據(jù)的一致性問題并不都和原子性有關(guān)。
比如剛剛的例子,在第五步的時候,對B賬戶做加法時只加了50元。那么該過程可以符合原子性,但是數(shù)據(jù)的一致性就出現(xiàn)了問題。

因此,事務(wù)的原子性與一致性缺一不可。

總結(jié)

以上是生活随笔為你收集整理的[数据库事务与锁]详解一: 彻底理解数据库事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。