事務:使用者定義的一組資料庫操作序列。這些操作要麼都做要麼都不做,它是乙個不可分割的工作單元。
事務的特性:(acid)
原子性(atommicity)、一致性(consistency)、隔離性(isolation)、持續性(durability)
原子性:事務是資料庫的邏輯操作單元,事務中的操作要麼都做要麼都不做。
所謂邏輯操作單元,我是這樣理解的。我們都知道資料庫是由多張表組成的,表中存的自然都是資料。但是資料與資料之間其實是存在邏輯關係的。最經典的乙個例子,銀行賬號。假如,我在某銀行有兩張卡,a和b。a裡面有10萬,b裡面有10萬。我名下就有20萬塊錢。接著假如,我今天抽風,我從a裡面轉出了5萬到b裡面。那麼這個事務可以抽象成兩個操作。
1.a卡裡面的錢要減少五萬。a=100000-50000=50000
2.b卡裡面的錢要增加五萬。b=100000 + 50000 = 15000
如果只做了操作1。a:5萬,b: 10萬。我平白無故少了5萬,那我肯定不幹。如果只做了操作2。我平白多了5萬,我是很願意的,銀行肯定也不幹。
這就是事務的原子性,要麼都做,要麼都不做。邏輯上不可分割。資料庫裡的資料畢竟都是有現實存在意義的,不能隨便亂改。
一致性:事務執行的結果必須使資料庫從乙個一致性狀態變成另乙個一致性狀態。還是以上面的例子來解釋,事務之前:a 10萬, b 10萬。我有20萬存在某行。這是乙個一致性狀態。 事務之後: a 5萬 b 15萬 我還是有20萬。我與銀行都不吃虧。資料庫變到了另乙個一致性的狀態。(我覺得一致性狀態可以把它理解為正確的、合理的狀態。資料庫的資料是隨時可以變化的,但是它得變得有意義,變得合理。亂七八糟地瞎改,那是黑客幹的事,是要被關起來反思噠。)
隔離性:就是乙個事務的執行不能被其他事務干擾。其實說白了還是為了保證事務的原子性和一致性。
持續性:有的書也會把它翻譯成永續性。就是指事務一旦成功提交,它對資料庫的資料的更新是持久的。如果不持久,那也沒有改的必要嘛。
事務的併發: 理論上來講,如果序列執行多個事務的話,n個事務排隊執行,t1完了t2,t2完了t3.....這樣乙個接著乙個,就可以很好的保證事務的acid特性了。但是萬事萬物都是兩面的,這樣做的一大代價就是資源浪費。其實每個事務在不同的操作過程中可能需要的資源不一樣,有時候需要cpu,有時候要訪問資料庫,有時候要通訊等。浪費了資源就響應慢了,響應慢了使用者就不幹了。這樣,事務的併發就應運而生啦。
t1->t2->t3: 這是序列。
t1(a)->t1(b)->t2(a)->t3(a)->t3(b)->t2(b)->t3(c): 並行執行。將事務切片,交叉併發執行。
事務的併發說白了就是節約系統資源,快速執行,減少使用者等待響應的事件。但是它破壞了事務的一致性和隔離性,所以就產生了以下的問題。
資料庫併發引起的三種資料不一致性。老是傻傻記不清,再來複習一遍吧。
1. 丟失修改。
事務t1和t2同時修改資料a,此時a=12,t1: a=a-1, t2: a=a-1, t1提交,t2提交。t1和t2都對t1做了減1的操作,但是t1被t2覆蓋。
2.不可重複讀。
事務t1在操作1和操作2都需要讀取某個資料a,在操作1結束後,t2中的操作修改了資料a。使得t1在後續操作中再次讀取到的資料a和之前的不一致。也就是t1中第一次讀取的資料a不可重複讀。
3.髒資料。
t1修改了某個資料a並將其寫入了磁碟。t2讀取了新的a,接著t1發現自己剛才抽風了不應該修改a,就回滾了剛剛的操作。這個時候t2悲劇了,因為你讀的資料是錯噠噠噠,腫麼辦?這就是髒讀。
資料庫理論 事務 amp 併發控制 001
事務 使用者定義的一組資料庫操作序列。這些操作要麼都做要麼都不做,它是乙個不可分割的工作單元。事務的特性 acid 原子性 atommicity 一致性 consistency 隔離性 isolation 持續性 durability 原子性 事務是資料庫的邏輯操作單元,事務中的操作要麼都做要麼都不...
資料庫 事務 併發控制技術
事務指的是連續的對資料庫操作的集合,對於乙個事務中的所有的資料庫操作,要麼全部成功,要麼全部失敗。允許多個使用者同時使用的資料可系統為多使用者資料庫系統。多使用者資料庫系統的特點是 在同一時刻,併發執行的事務數量可以達到成千上萬個。多事務執行方式有三種 1 事務的序列執行 每個時刻只有乙個事務執行,...
資料庫的事務控制和併發控制
資料庫的事務控制和併發控制 1.事務控制 事務是併發控制的基本單位,也是恢復的基本單位。在sql中支援事務的概念。所謂事務,是使用者定義的乙個操作序列 集合 這些操作要麼都做,要麼乙個都 不做,是乙個不可分割的整體。乙個事務通常以begin transaction開始,以commit或rollbac...