日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中JDBC进阶教程之数据库的隔离级别!

發布時間:2024/9/30 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中JDBC进阶教程之数据库的隔离级别! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對數據庫而言,其明顯的特征是資源可以被多個用戶共享。當相同的數據庫資源被多個用戶(多個事務)同時訪問時,如果沒有采取必要的隔離措施,就會導致各種并發問題,破壞數據的完整性。

如果不考慮隔離性,數據庫將會存在三種并發問題。

1. 臟讀

一個事務讀到了另一個事務尚未提交的更改數據。例如,事務T1修改某一數據后,事務T2讀取同一數據,然后事務T1由于某種原因被撤消,這時T1已修改過的數據恢復原值,T2讀到的數據就與數據庫中的數據不一致,其讀到的數據就為"臟"數據,對該數據的操作也無法承認。

2. 不可重復讀

不可重復讀是指一個事務讀取數據后,另一個事務執行更新操作,使第一個事務無法再現前一次的讀取結果。例如,事務T1讀取B=100進行運算,事務T2讀取同一數據B,對其進行修改后將B=200寫回數據庫。這時,T1為了對讀取值校對重讀B,B已為200,與第一次讀取值不一致。

3. 幻讀

幻讀是指一個事務讀取數據后,另一個事務執行插入操作,使第一個事務無法再現前一次的讀取結果。例如,事務T1兩次統計所有賬戶的總金額,在這期間,事務T2插入了一條新記錄,使得兩次統計的總金額不一致。

為了解決并發造成的問題,數據庫規范定義了四種隔離級別,用于限定事務之間的可見性,不同事務隔離級別能夠解決的數據并發問題的能力是不同的,具體如表2.1所示。

表2.1 數據庫的隔離級別

read uncommitted (讀未提交),一個事務讀到另一個事務沒有提交的數據。

read committed (讀已提交),一個事務讀到另一個事務已經提交的數據。

repeatable read (可重復讀),在一個事務中讀到的數據始終一致,無論別的事務是否提交。

serializable(串行化),同時只能執行一個事務,相當于是事務中的單線程。

以上四種隔離級別安全性最高的是serializable (串行化),最低的是read uncommitted(讀未提交),當然安全性能越高,執行效率就越低。像serializable(串行化)這樣的級別,就是以鎖表的方式,使得其他的事務只能在鎖外等待,所以平時選用何種隔離級別應該根據實際情況。MySQL數據庫默認的隔離級別為repeatable read (可重復讀)。

原文來自千鋒教育:http://wh.mobiletrain.org/,轉載請注明出處。

總結

以上是生活随笔為你收集整理的Java中JDBC进阶教程之数据库的隔离级别!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。