大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java數據庫高級教程下載,原理知識點

Java數據庫高級教程下載,原理知識點

更新時間:2020-05-12 15:20:38 來源:動力節點 瀏覽2293次

Java數據庫高級教程下載,原理知識點,掌握數據庫已經成為了每個程序員的必備基本技能,今天我們就來帶大家徹徹底底弄數據庫原理的相關知識點,內容包括了事務、并發一致性、封鎖、隔離級別、多版本并發控制和Next-KeyLock。希望本文全面的講解可以一次性解決大家關于數據庫原理的所有疑問。

1.事務

(1)定義

事務指的是滿足ACID特性的一組操作,可以通過Commit提交一個事務,也可以使用Rollback進行回滾。

Java數據庫高級教程下載,原理知識點

(2)特性

  • 原子性:事務被視為不可分割的最小單元,事務的所有操作要么全部提交成功,要么全部失敗回滾。回滾可以用回滾日志來實現,回滾日志記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作即可。
  • 一致性:數據庫在事務執行前后都保持一致性狀態。在一致性狀態下,所有事務對一個數據的讀取結果都是相同的。對于關系型數據庫,要求更新過的數據能被后續的訪問都能看到,這是強一致性;如果能容忍后續的部分或者全部訪問不到,則是弱一致性**;如果經過一段時間后要求能訪問到更新后的數據,則是最終一致性。
  • 隔離性:一個事務所做的修改在最終提交以前,對其它事務是不可見的。
  • 持久性:一旦事務提交,則其所做的修改將會永遠保存到數據庫中。即使系統發生崩潰,事務執行的結果也不能丟失。

2.并發一致性

(1)丟失更新

T1和T2兩個事務都對一個數據進行修改,T1先修改,T2隨后修改,T2的修改覆蓋了T1的修改。這里舉個飛機訂票系統的例子方便大家了解:甲售票點(甲事務)讀出某航班的機票余額A,設A=16;乙售票點(乙事務)讀出同一航班的機票余額A,也為16;甲售票點賣出一張機票,修改余額A←A-1。所以A為15,把A寫回數據庫;乙售票點也賣出一張機票,修改余額A←A-1。所以A為15,把A寫回數據庫。結果明明賣出兩張機票,數據庫中機票余額只減少1。

(2)不可重復讀

T2讀取一個數據,T1對該數據做了修改。如果T2再次讀取這個數據,此時讀取的結果和第一次讀取的結果不同。具體來講就是,當前事務先進行了一次數據讀取,然后再次讀取到的數據是別的事務修改成功的數據,導致兩次讀取到的數據不匹配。

 (3)幻影讀

T1讀取某個范圍的數據,T2在這個范圍內插入新的數據,T1再次讀取這個范圍的數據,此時讀取的結果和和第一次讀取的結果不同。或者用更通俗地說,事務A首先根據條件索引得到N條數據,然后事務B改變了這N條數據之外的M條或者增添了M條符合事務A搜索條件的數據,導致事務A再次搜索發現有N+M條數據了,就產生了幻讀。換句話說,當前事務讀第一次取到的數據比后來讀取到數據條目少。

3.封鎖

(1)封鎖粒度

MySQL中提供了兩種封鎖粒度:行級鎖以及表級鎖。應該盡量只鎖定需要修改的那部分數據,而不是所有的資源。鎖定的數據量越少,發生鎖爭用的可能就越小,系統的并發程度就越高。但是加鎖需要消耗資源,鎖的各種操作(包括獲取鎖、釋放鎖、以及檢查鎖狀態)都會增加系統開銷。因此封鎖粒度越小,系統開銷就越大。在選擇封鎖粒度時,需要在鎖開銷和并發程度之間做一個權衡。

(2)封鎖類型

 A:讀寫鎖

 排它鎖簡寫為X鎖,又稱寫鎖;共享鎖簡寫為S鎖,又稱讀鎖。有以下兩個規定:一個事務對數據對象A加了X鎖,就可以對A進行讀取和更新。加鎖期間其它事務不能對A加任何鎖。一個事務對數據對象A加了S鎖,可以對A進行讀取操作,但是不能進行更新操作。加鎖期間其它事務能對A加S鎖,但是不能加X鎖。

B:意向鎖

使用意向鎖(IntentionLocks)可以更容易地支持多粒度封鎖。在存在行級鎖和表級鎖的情況下,事務T想要對表A加X鎖,就需要先檢測是否有其它事務對表A或者表A中的任意一行加了鎖,那么就需要對表A的每一行都檢測一次,這是非常耗時的。意向鎖在原來的X/S鎖之上引入了IX/IS,IX/IS都是表鎖,用來表示一個事務想要在表中的某個數據行上加X鎖或S鎖。有以下兩個規定:一個事務在獲得某個數據行對象的S鎖之前,必須先獲得表的IS鎖或者更強的鎖;一個事務在獲得某個數據行對象的X鎖之前,必須先獲得表的IX鎖。

(3)封鎖協議

封鎖協議分為三級封鎖協議和兩段鎖協議。MySQL的InnoDB存儲引擎采用兩段鎖協議,會根據隔離級別在需要的時候自動加鎖,并且所有的鎖都是在同一時刻被釋放,這被稱為隱式鎖定。InnoDB也可以使用特定的語句進行顯示鎖定:

SELECT...LOCKInSHAREMODE;SELECT...FORUPDATE;

4.隔離級別

為了避免丟失更新、臟讀、不可重復讀和幻讀,在標準SQL規范中,定義了4個事務隔離級別,不同的隔離級別對事務的處理不同。具體如下圖:

Java數據庫高級教程下載,原理知識點

5.多版本并發控制

多版本并發控制是MySQL的InnoDB存儲引擎實現隔離級別的一種具體方式,用于實現提交讀和可重復讀這兩種隔離級別。而未提交讀隔離級別總是讀取最新的數據行,無需使用MVCC。可串行化隔離級別需要對所有讀取的行都加鎖,單純使用MVCC無法實現。MVCC在大多數情況下代替了行鎖。最早的數據庫系統,只有讀讀之間可以并發,讀寫,寫讀,寫寫都要阻塞。引入多版本之后,只有寫寫之間相互阻塞,其他三種操作都可以并行,這樣大幅度提高了InnoDB的并發度。但是,使用MVCC每行記錄都需要額外的存儲空間,需要做更多的行維護和檢查工作。

6.Next-KeyLock

(1)RecordLock

鎖定一個記錄上的索引,而不是記錄本身。如果表沒有設置索引,InnoDB會自動在主鍵上創建隱藏的聚簇索引,因此RecordLock依然可以使用。

(2)GapLocks

鎖定索引之間的間隙,但是不包含索引本身。例如當一個事務執行以下語句,其它事務就不能在t.c中插入15。

SELECTcFROMtWHEREcBETWEEN10and20FORUPDATE;

(3)Next-KeyLock

它是RecordLock和GapLock的結合,不僅鎖定一個記錄上的索引,也鎖定索引之間的間隙。例如一個索引包含以下值:10,11,13,and20,那么就需要鎖定以下區間:

(negativeinfinity,10](10,11](11,13](13,20](20,positiveinfinity)

Java數據庫高級教程下載,原理知識點

以上就是動力節點java培訓機構的小編針對“Java數據庫高級教程下載,原理知識點”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

Java數據庫免費視頻教程

老杜最新MySQL教程:http://www.dabaquan.cn/javavideo/111.html

老杜最新JDBC教程:http://www.dabaquan.cn/javavideo/112.html

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 精品免费 | 99精品久久久久中文字幕 | www夜夜操com| 目韩一区二区三区系列片丶 | 老司机永久免费视频 | 老子理论不卡影院6080 | 一二三区在线观看 | 亚洲专区第一页 | 九九视频在线免费观看 | 国产成人精品综合网站 | 欧美在线观看a | 日韩一级a毛片欧美一级 | 不卡日本| 免费在线亚洲 | 国产视频久久久 | 成人特黄午夜性a一级毛片 成人特级毛片69免费观看 | 干干日日 | 久久亚洲精品玖玖玖玖 | 成人在线视频网 | 曰批免费视频播放在线看片二 | 欧美国产精品亚洲精品第一区 | 色哥网站| tobesex日本护士 | 欧美激情久久久久久久大片 | 久久亚洲国产成人亚 | 国产精品毛片 | 伊人精品影院一本到欧美 | 日日干天天操 | 色综合日本 | 精品中文字幕久久久久久 | 天天干天天射天天插 | 国产黄色自拍 | 亚洲最大视频网站 | 四虎久久久 | 69视频在线观看福利视频 | 精品久久久久久久久久久 | 一级成人毛片免费观看欧美 | 欧美va亚洲va在线观看蝴蝶网 | 欧美精品成人一区二区视频一 | 成人欧美午夜视频毛片 | 可以直接看的毛片 |