事務指的是連續的對資料庫操作的集合,對於乙個事務中的所有的資料庫操作,要麼全部成功,要麼全部失敗。
允許多個使用者同時使用的資料可系統為多使用者資料庫系統。多使用者資料庫系統的特點是:在同一時刻,併發執行的事務數量可以達到成千上萬個。
多事務執行方式有三種:
1)事務的序列執行;(每個時刻只有乙個事務執行,不能充分利用系統資源,發揮資料庫共享資源的特點)
2)事務的交叉併發方式;(單處理機系統)
3)事務的同時併發方式;(多處理機系統,每個處理機執行乙個事務,也是事務併發執行最理想的方式,受制於硬體環境,需要更複雜的併發控 制機制)
併發控制是和事務緊密相關的概念,併發控制通常是指對事務的併發控制。事務是併發控制的基本單位。資料庫管理系統必須提供併發控制機制,併發控制是衡量乙個資料庫管理系統效能的重要指標之一。併發控制機制的任務是保證資料的隔離性和一致性。
併發操作帶來的資料不一致性可以分為三部分:
1)丟失更新;
2)不可重複讀;
3)讀「髒」資料;
如上圖所示:
丟失更新指的是事務t1和t2之間為「修改--修改」的關係。比如,資料庫中原本機票**為1000元,事務t1為將機票**+100元,事務t1讀到機票**為1000元,執行操作+100元,事務t2也讀取機票**為1000元,將機票**+200元,事務t1提交資料,之後事務t2提交資料,機票**變為事務t2的1200元,事務t1的更新操作被覆蓋掉了,叫做丟失更新。
不可重複讀發生於事務t1和t2之間為「讀--更新」的關係。其中,更新包括三類:修改、刪除和插入。
「讀--修改」。事務t1在讀機票資料為1000元,事務t2修改機票**為1200元,事務t1想確認一下,再讀出的機票**為1200元,與第一次不一致;
「讀--刪除」。事務t1讀出資料庫中有20條機票**的資料,事務t2對此20條資料進行了刪除其中2條的操作,事務t1再讀出的機票**只有18條資訊,與第一次不一致,導致其中2條資料莫名的消失了;
「讀--插入」。事務t1讀出資料庫中有20條資料,事務t2插入兩條資料,事務t1再一次讀,得到的結果有22條資料,與第一次讀出的條數不一致,莫名多了兩條資料。
其中「讀--刪除」和「讀--插入」會導致兩次讀出的結果莫名的增加或減少,因此,這兩種情況又叫做「幻影讀」。
讀「髒」資料發生於事務t1和t2之間為「修改--讀」的關係。比如,機票**為1000元,t1將機票**修改為1200元並寫回到磁碟,事務t2讀取同一資料後,t1由於某種原因被撤銷,機票**回到1000元,t2讀到的資料和資料庫中的不一致,此為讀「髒」資料。
資料不一致的原因:併發控制破壞了事務的隔離性。
併發控制的主要技術:
1.封鎖
2.時間戳
3.樂觀控制法
4.多版本併發控制
資料庫併發控制技術
事務是一系列的資料庫操作,是資料庫應用程式的基本邏輯單元,也是恢復和併發控制的基本單位。事務處理技術主要包括資料庫恢復技術和併發控制技術。本篇博文主要總結下併發控制技術。事務 是使用者定義的乙個資料庫操作序列,這些操作要麼全做,要麼全不做,是乙個不可分割的工作單位。例如,在關聯式資料庫中,乙個事務可...
資料庫的事務控制和併發控制
資料庫的事務控制和併發控制 1.事務控制 事務是併發控制的基本單位,也是恢復的基本單位。在sql中支援事務的概念。所謂事務,是使用者定義的乙個操作序列 集合 這些操作要麼都做,要麼乙個都 不做,是乙個不可分割的整體。乙個事務通常以begin transaction開始,以commit或rollbac...
資料庫併發事務
比如有乙個方法a,在a的內部有兩次同樣的select查詢,但是在兩次select之間方法b對資料庫進行了修改,那麼查詢到的a兩次查詢到的內容是否一致呢,這其實就是資料庫的 不可重複讀 幻讀 問題 這裡用spring hibernate mysql實驗,如果方法a不在事務環境下執行,那麼查詢到的兩次結...