事務(transaction)是資料庫系統中:系統操作的乙個邏輯單元,所有的操作要麼全部成功,要麼全部失敗。
事務是區分檔案儲存系統和nosql資料庫的重要特性之一,且存在的意義是為了保證即使在併發情況下也能正確的執行crud操作。
事務需要保證的四個特性
a:原子性(atomicity)
乙個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的裝填,就像這個事務從來沒有執行過一樣。原子性表現為操作不能被分割。
b:一致性(consistency)
在事務開始之前和事務結束之後,資料庫的完整性沒有被破壞。資料庫要一直處於一致的裝填,事務開始前是乙個一致狀態,事務結束後是另乙個一致裝填,事務將資料庫從乙個一致狀態轉移到另乙個一致狀態
c:隔離性(isolation)
資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離分為不同級別,包括讀未提交(read uncommitted)、讀已提交(read committed)、可重複度(repeatable read)和序列化(serializable)。
d:永續性(durability)
事務處理出書後,對資料的修改就是永久的,即便系統故障也不會丟失。
在高併發的情況下,要完全保證其acid特性是非常困難的,除非把所有的事務序列化執行,但帶來的負面的影響將是效能大打折扣。很多時候我們有些業務對事務的要求是不一樣的,所以資料庫中設計了四種隔離級別,供使用者基於業務進行選擇。
資料庫預設隔離級別:
oracle中預設級別是read committed
mysql中預設級別repeatable read
#檢視mysql的預設隔離級別
select @@tx_isolation
#設定為讀未提交
set tx_isolation='read-uncommitted';
#設定為讀已提交
set tx_isolation='read-committed';
#設定為可重複讀
set tx_isolation='repeatable-read';
#設定為序列化
set tx_isolation='serializable';
隔離級別
髒讀(dirty read)
不可重複度(nonrepeatable read)
幻讀(phantom read)
未提交讀 (read uncommitted)
可能可能
可能已提交讀
不可能可能
可能可重複讀(repeatable read)
不可能不可能
可能可序列化(serializable)
不可能不可能
不可能髒讀
乙個事務讀取到另一事務未提交的更新資料
session_1
#設定為讀未提交
set tx_isolation='read-uncommitted';
begin;
insert into `account` (accountname,user,money) values ('222','cat',1000);
rollback;
commit;
session_2
#設定為讀未提交
set tx_isolation='read-uncommitted';
select * from account;
不可重複讀
在同一事務中,多次讀取同一資料返回的結果有所不同,換句話說,後續讀取可以讀到另一事務已提交的更新資料。相反,「可重複讀」在同一事務中多次讀取資料時,能夠保證所讀取資料一樣,也就是後續讀取不能讀到另一事務已提交的更新資料。
事務b修改資料導致當前事務a前後讀取資料不一致,側重點在於事務b修改
當前事務讀到了其他事務修改的資料
幻讀
查詢表中一條資料,如果不存在就插入一條,併發的時候卻發現,裡面居然有兩條相同的資料。
事務a修改表中資料,此時事務b插入一條新資料,事務a查詢發現表中還有沒修改的資料,像是出現幻覺
事務a讀到了事務b新增的資料,導致結果不一致,側重點在於事務b新增資料
資料庫事務的特性
事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...
資料庫事務ACID特性
資料庫管理系統中事務 transaction 的四個特性 分析時根據首字母縮寫依次解釋 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。執行...
資料庫 事務的特性
事務是指對系統進行的一組操作,為了保證系統的完整性,事務需要具有acid特性,具體如下 1.原子性 atomic 乙個事務包含多個操作,這些操作要麼全部執行,要麼全都不執行。實現事務的原子性,要支援回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。回滾實際上是乙個比較高層抽象的概念,大多數db在...