hibernate 資料庫事務初探

2021-08-20 09:52:10 字數 1413 閱讀 1200

對事務的知識進行一次梳理,解決自己似懂非懂的狀態!

什麼是事務?

比較官方的解釋是:由一條或者多條sql組成的不可分割的工作單元!要是執行失敗就都失敗,要是成功就都成功!

舉個栗子就是:你轉錢給別人,分為以下幾個步驟

1. 你的錢減少

2. 對方的錢增多

如果在1->2這個過程中 伺服器崩了 執行就失敗了 加上事務後,你的處理過程是乙個整體,一處失敗就都失敗了,你的轉錢操作就都失敗了 ,整體成功才是真的成功!

事物的四大特性(acid)

1.原子性:事務是最小單位了,不可分割的乙個整體

2.一致性:事務完成時,必須使所有的資料保持一致的狀態

3.隔離性:乙個事務執行期間不能被另乙個事務干擾到

4.永續性:事務提交後,資料發生的改變是永久的

然後就是 在併發時 ,因為有很多人訪問資料庫,就有可能發生以下的問題

1.髒讀:乙個事務讀取到另乙個事務未提交的資料!

髒讀的例子:發工資了,財務給你打錢,發了5000元,但這時事務還沒提交需要確認,你同時去查了賬戶發現是5000,然後財務發現,算錯了,你只能發2000,然後乙個回滾,你以為你有5000,實際上只有2000了!

2.不可重複讀:乙個事務讀到了另乙個事務update的資料,導致同乙個事務多次查詢結果不一樣,

這個不可重複讀舉個例子 :你請哥們吃飯,然後去結賬,你老婆同時在隔壁超市買東西,你賬戶就1000元,你和你老婆同時買,賬戶裡雙方都看到有1000元 你們刷卡,你老婆那邊超市網速快,成功了 還先於你提交了事務,你再付款失敗了,沒錢了 !

3.幻讀/虛讀:乙個事務讀到了另乙個事務insert的資料,導致同乙個事務多次查詢結果不一樣,

舉個例子:月末了,你老婆查賬,發現你這個月才花了80很滿意!你就沒怎麼花,結果查賬的同時你付款買了一副新耳機,花了2000,等賬單列印出來,發現賬單2080????wtf???什麼情況?幻覺?

為了解決上面這些問題,便有了資料庫的隔離機制!

有以下幾種隔離機制

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 、read committed 、repeatable read 、serializable ,這四個級別可以逐個解決髒讀 、不可重複讀 、幻讀 這幾類問題。

見下圖

然後最後提一下

mysql 預設是 repeatable read

oracle 預設是 read committed

初解資料庫 事務

作為程式猿我們都應該清楚,不管是在求職面試的過程中還是在平常的開發中,資料庫起了很重要的作用,資料庫又分為關係型資料庫和非關係型資料庫。接下來將會介紹一些資料庫方面的基礎知識。提起資料庫我們想到的就是我們常常編寫的一些sql語句,那這些sql語句在執行的過程中,怎麼執行的,什麼時候結束,這時候邊涉及...

資料庫事務與併發 Hibernate

資料庫事務中的基本概念 資料庫事務是指,由乙個或多個sql語句組成的工作單元,這個工作單元中的sql語句相互依賴,如果有乙個sql語句失敗,那麼整個操作都要撤銷。在併發環境中,當多個事務同時訪問同一資源時,可能會造成併發問題,此時可以使用資料庫系統的事務隔離級別來避免各類併發問題。此外,在應用程式中...

資料庫事務與併發 Hibernate

資料庫事務與併發 hibernate 資料庫事務中的基本概念 資料庫事務是指,由乙個或多個sql語句組成的工作單元,這個工作單元中的sql語句相互依賴,如果有乙個sql語句失敗,那麼整個操作都要撤銷。在併發環境中,當多個事務同時訪問同一資源時,可能會造成併發問題,此時可以使用資料庫系統的事務隔離級別...