資料庫事務、特性及隔離級別
一、事務
事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。而這些邏輯工作單元需要具有原子性, 一致性,隔離性和永續性四個屬性,統稱為ACID特性。
二、事務的4個基本特徵
● 原子性(Atomic):事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要麼全部成功,要麼全部失敗。
● 一致性(Consistency):只有合法的資料可以被寫入資料庫,否則事務應該將其回滾到最初狀態。
● 隔離性 (Isolation):事務允許多個使用者對同一個資料進行併發訪問,而不破壞資料的正確性和完整性。同時,並行事務的修改必須與其他並行事務的修改相互獨立。
● 永續性(Durability):事務結束後,事務處理的結果必須能夠得到固化。
三、事務的隔離級別
資料庫事務的隔離級別有4種,由低到高分別為Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀。
Read uncommitted
讀未提交,顧名思義,就是一個事務可以讀取另一個未提交事務的資料,出現髒讀;
Read committed
讀提交,顧名思義,就是一個事務要等另一個事務提交後才能讀取資料。
若有事務對資料進行更新(UPDATE)操作時,讀操作事務要等待這個更新操作事務提交後才能讀取資料,可以解決髒讀問題。但在這個事例中,出現了一個事務範圍內兩個相同的查詢卻返回了不同資料,這就是不可重複讀。
Repeatable read
重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作。
重複讀可以解決不可重複讀問題。寫到這裡,應該明白的一點就是,不可重複讀對應的是修改,即UPDATE操作。但是可能還會有幻讀問題。因為幻讀問題對應的是插入INSERT操作,而不是UPDATE操作。
Serializable 序列化
是最高的事務隔離級別,在該級別下,事務序列化順序執行