事務的特性
如果乙個資料庫生成事務的操作,那麼該資料庫必須具備以下四大特性 (簡稱: acid) :
1.原子性 (atomicity)
一次事務中如果進行多個資料操作的業務,最終結果要拿所有操作都成功,要麼所有操作都失敗.
2.一致型 (consistency)
一致性就是資料表中的資料更新要求合乎邏輯的特性,滿足了原子性不一定滿足一致性.
3.隔離性 (isolation)
隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表,資料庫為每乙個使用者開啟的事務,
不能被其他事務的操作所干擾,多個併發事務之間要相互隔離.
4.永續性 (durability)
永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,
即便是資料庫系統遇到故障的情況下也不會丟失提交事務的操作.
ex:
比如事務提交還沒來得及在磁碟中進行資料的更新就因為系統出現了故障(如:斷電)
導致本次事務提交了但是沒有真正更新資料,此時應該在供電恢復之後會繼續將沒有更新的資料進行更新(需要介質),
因為要進行備份或日誌記錄等等,這些操作一般是dbms完成,或者有專門的容災處理.
事務沒有隔離性會發生的幾種問題:
1.更新丟失
如果多個執行緒操作,基於同乙個查詢結構對錶中的記錄進行修改,name後修改的記錄將會覆蓋前面修改的記錄,
前面修改的記錄就丟掉了,這就叫做更新丟失,這是因為系統沒有執行鎖操作,因此併發事務並沒有被隔離開來.
第 1 類丟失更新: 事務 a 撤銷時,把已經提交的事務 b 的更新資料覆蓋了
第 2 類丟失更新: 事務 a 覆蓋事務 b 已經提交的資料, 造成事務 b 所做的操作丟失.
解決方法: 對行加鎖,只允許併發乙個更新事務.
2.髒讀
髒讀是指事務處理過程中讀取了另乙個事務未提交的資料 (即將回退的資料).
解決方法:如果在第乙個事務提交前,任何其他事務不可讀取其修改過的值,則可以避免該問題(加鎖)
3.不可重複讀
乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的結果.事務 t1 讀取某一資料後,事務 t2 對其做了修改,
當事務t1再次讀取該資料時得到與前一次不同的值.
解決方法:如果只有在修改事務完全提交之後才可以讀取資料, 則可以避免該問題
不可重複和髒讀的區別是:
髒讀是某一事務讀取了另乙個未提交的髒資料 (即將回滾的資料),
而不可重複讀取則是讀取了前一事務提交(更新) 的資料.
注意:
在某些情況下, 不可重複讀並不是問題, 比如我們多次查詢某個資料當然以最後查詢得到的結果為主
4.虛讀(幻讀)
指兩次執行同一條 select 語句會出現不同的結果, 第二次讀取會增加或減少資料,
並沒有說這兩次執行時在同一事物中.
ex:
目前工資五1000的員工有10人. 那麼事物 1 中讀取所有工資為 1000 的員工,得到10條記錄;
這時事物 2 向員工表插入了一條員工記錄, 工資也為 1000; 那麼事物 1 再次讀取所有工資為1000的員工
共讀取到了11條記錄.
解決方法:如果在操作事物完成資料處理之前, 任何其他事務都不可以新增新資料,則可以避免該問題
事務的特性
事務具有四個特徵 原子性 atomicity 一致性 consistency 隔離性 isolation 和持續性 durability 這四個特性簡稱為 acid 特性。1 原子性 事務是資料庫的邏輯工作單位,事務中包含的各操作要麼都做,要麼都不做 2 一致性 事 務執行的結果必須是使資料庫從乙個...
事務的特性
事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。事務通常是以begin transaction開始,以commit或roll...
事務的特性
如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須支援以下四個特性 原子性 atomicity 一次事務中如果要進行多個資料操作,最終的結果要麼所有資料操作都成功,要麼所有資料操作都失敗 例如a轉賬給b100元,最終的結果要求a減少100元,b增加100元,不能出現a減少了但b沒有增加 一致性 co...