事務:事務其實就是單個資料邏輯單元組成的物件操作集合,而資料庫的終極目標就是使資料庫從乙個一致的狀態轉換到另乙個一致的狀態,這就是acid中的一致性,原子性,隔離性,永續性是為了實現這個目標的手段。
事務的四大特性:
a:原子性(atomicity),乙個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的狀態
c:一致性(consistency),指的是在乙個事務執行之前和執行之後資料庫都必須處於一致性狀態。如果事務成功地完成,那麼系統中所有變化將正確地應用,系統處於有效狀態。如果在事務**現錯誤,那麼系統中的所有變化將自動地回滾,系統返回到原始狀態。
i:隔離性(isolation),指的是在併發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間。由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務檢視資料更新時,資料所處的狀態要麼是另一事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視到中間狀態的資料。
d:永續性(durability),指的是只要事務成功結束,它對資料庫所做的更新就必須永久儲存下來。即使發生系統崩潰,重新啟動資料庫系統後,資料庫還能恢復到事務成功結束時的狀態。
資料庫鎖:
1、按級別分
共享鎖(讀鎖):乙個事務獲取了乙個資料行的共享鎖,其他事務能夠獲得該行對應的共享鎖,但不能獲得排他鎖,即乙個事務再讀取乙個資料的時候,其他事務也可以讀,但不能對資料行進行增刪改。
排他鎖(寫鎖):乙個事務獲取了乙個資料行的排他鎖,其他食物就不能再獲取該行的其他鎖,即乙個事務再讀取乙個資料行的時候,其他事務不能對該資料行進行增刪改查。
2、按粒度分
行級鎖:開銷大,會出現死鎖,鎖定粒度最小,發生鎖衝突概率最低,併發高
#①update
mk_user
set
name
=
'1'
where
`
name
`=
'idis12'
;
#②update
mk_user
set
name
=
'12'
where
id=12;
第一條語句會優先使用`name`索引,因為name不是主鍵索引,還會用到主鍵索引,第二條語句是首先使用主鍵索引,再使用name索引 如果兩條語句同時執行,第一條語句執行了name索引等待第二條釋放主鍵索引,第二條執行了主鍵索引等待第一條的name索引,這樣就造成了死鎖
表級鎖:開銷小,不會出現死鎖,鎖的粒度大,發生鎖衝突概率高,併發低
頁面鎖:會出現死鎖,併發度一般
併發事務的四大問題
髒讀:事務a讀取了事務b未提交的資料
不可重複讀:事務a在連續讀的過程中事務b寫入了一次,事務a前後讀取的資料不一樣
丟失更新:事務a和事務b均寫入資料,事務a寫入的資料被事務b覆蓋
幻讀:事務a修改資料的過程中,事務b向表中插入一條資料,a修改完後發現資料並沒有被全部修改完
隔離級別
隔離性的實現主要是基於資料庫鎖機制來實現的;隔離級別主要分為讀未提交(read uncommited),讀已提交(read commited),可重複讀(repeatable reads),序列化(serializable)
read uncommited:乙個事務讀取到另外乙個事務未提交的資料,髒讀
實現原理:在事務讀取資料的時候不加鎖,但是在事務更新某條資料的時候,必須先對其加上行級共享鎖,直到事務結束才釋放
read commited:
讀取:事務在讀取資料的時候加上行級共享鎖,一旦讀完釋放鎖
更新:事務在更新資料的時候加上行級排他鎖,直到事務結束才釋放鎖
repeatable read:
讀取:事務在讀取資料的時候,必須加上行級共享鎖,直到事務結束
更新:事務在更新資料的時候加上行級排他鎖,直到事務結束
serializable:
讀取:事務讀取資料的時候加上表級共享鎖,直到事務結束
更新:事務在更新資料的時候,加上表級排他鎖,直到事務結束
資料庫事務
事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...
資料庫 事務
資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...
資料庫事務
這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...