資料庫事務

2021-09-02 04:25:42 字數 1415 閱讀 1501

jdbc規範中定義了四個資料庫事務級別:

transaction_none   【無事務】

transaction_read_uncommitted  【讀取未提交】

transaction_read_committed  【讀取已提交】

transaction_repeatable_read  【可重複讀】

transaction_serializable  【序列化】

如上的中文命名是我自己取的,是字面翻譯。

各級別的事務影響到的效果分別有幾個:

幻讀 ,不可重複讀, 髒讀

它們真的事務嚴格級別的排序就是:

幻讀 <  不可重複讀  <  髒讀

幻讀:表示在事務1執行中,分別根據相同條件查詢2次,兩次中間,事務2插入了一條記錄,並且提交了事務。事務1在第二次讀取時,可以看到剛才事務2插入的資料。但是事務2修改的資料是無法讀取(實際中應該是事務2並無法在事務1執行中,更新事務1鎖定的記錄。這個鎖應該是行級別的鎖,但是並沒鎖定表,所以插入資料是可以的,這是個人理解,如有大俠發現不對,請幫我更正)

不可重複讀:意思就是在乙個事務中,先後讀取2此資料,資料內容不一樣(說的是相同記錄中字段值變化了,不包含出現了新的記錄行),傳送這個的原理就是,事務1中,先讀取第一次,之後事務2更新了事務1中查詢出的某些記錄的字段值,並且是事務2提交了事務。然後事務1又重新讀取剛才相同查詢條件的記錄,發現和之前查詢中相同記錄中字段值有些已經不一樣了。

髒讀:表示事務1修改了資料(修改字段或者插入記錄),還沒提交事務時,事務2就執行了,而且可以看到並使用事務1做了修改的記錄,而此時事務1還並沒有提交呢。表示事務2發生了髒讀,事務2使用了還沒提交的資料,這些資料就叫髒資料。所以叫髒讀。這是危險的,因為事務1可能之後選擇回滾事務。那麼再某些業務上將產生嚴重的錯誤。

jdbc事務級別從不嚴格到嚴格,產生的不良效果從重到輕,效率也從快到慢:

transaction_none   【無事務】  

什麼不良效果都可能發生

transaction_read_uncommitted  【讀取未提交】

可產生:髒讀、不可重複讀、幻讀

字面意思理解:我可以讀取別人未提交的內容。

transaction_read_committed  【讀取已提交】

可產生:不可重複讀、幻讀

字面理解:在我的事務過程中,可以讀取別人已經提交的資料

transaction_repeatable_read  【可重複讀】

可產生:幻讀

字面理解:可以重複讀,意思是,杜絕了不可重複讀(含)以上,但會產生幻讀。

transaction_serializable  【序列化】

以上不良效果都不會產生,因為事務是序列化的,就是乙個乙個的事務挨個執行。應該是鎖定了整個表。

資料庫事務

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...

資料庫 事務

資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...

資料庫事務

這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...