1. 程式人生 > >資料庫事務的特性和隔離級別(簡單,易懂,易記,不看後悔)

資料庫事務的特性和隔離級別(簡單,易懂,易記,不看後悔)

資料庫事務的四大特性(ACID)

原子性(Atomicity)

事務中的操作要麼全部成功,要麼失敗回滾

一致性(Consistency)

一個事務執行之前和執行之後都必須處於一致性狀態。拿轉賬來說,假設使用者A和使用者B兩者的錢加起來一共是5000,那麼不管A和B之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。

隔離性(Isolation)

兩個事務之間操作互不影響. 不採用資料隔離會出現髒讀,不可重複讀和幻讀. 資料庫的隔離級別有讀未提交,讀提交,可重複讀和序列化

永續性(Durability)

一個事務一旦提交了,那麼資料庫中資料的改變就應該是永久性的.即便是資料庫系統遇到故障的情況下也不應該改變資料

資料庫的隔離級別

mysql支援這四種隔離級別,但是預設支援到可重複讀

讀未提交

一個事務可以讀取另一個事務已經修改但是還未提交的資料.會導致髒讀.使用讀提交可以解決髒讀

讀提交

一個事務要等另一個事務提交後才能讀取事務.會導致不可重複讀.採用可重複讀可以解決不可重複讀

例如:我拿卡去消費,系統顯示卡內餘額剩餘1萬,就在這個時候,老婆把錢轉到自己的賬戶了,這個時候,我這邊收費系統準備扣款時,卡里竟然沒錢了.在這個事例中,出現了一個事務範圍內的兩次查詢卻返回了不同的資料.這就是不可重複讀

可重複讀

開始讀取資料(事務開啟)的時候,不允許修改(update)操作,但是仍然會導致幻讀

有一天,妻子檢視我的消費記錄(事務開啟),發現我消費了1萬元,就在這個時候,我又買了一萬元的電腦,即進行了insert操作,並提交了事務.當妻子列印我的消費記錄時(妻子事務提交).發現我花了2萬元,彷彿出現了幻覺.這就是幻讀.採用序列化可以避免幻讀

Serializable序列化(序列化)

Serializable是最高的事務隔離級別,在該級別下,事務序列化順序執行.相當於資料庫被設計成了單執行緒資料庫.一致性最好,但是併發性最差,效能很低,一般很少使用.如果對一致性要求比較嚴格,而且併發量比較小的情況下可以考慮使用