知識點總結(jié)3-數(shù)據(jù)庫

1.ACID


⑴ 原子性(Atomicity)

 原子性是指事務(wù)包含的所有操作要么全部成功眼五,要么全部失敗回滾不可拆分的一體彤灶,這和前面兩篇博客介紹事務(wù)的功能是一樣的概念看幼,因此事務(wù)的操作如果成功就必須要完全應(yīng)用到數(shù)據(jù)庫,如果操作失敗則不能對數(shù)據(jù)庫有任何影響幌陕。

⑵ 一致性(Consistency)

 一致性是指事務(wù)必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另一個一致性狀態(tài)诵姜,也就是說一個事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)

  拿轉(zhuǎn)賬來說搏熄,假設(shè)用戶A和用戶B兩者的錢加起來一共是5000棚唆,那么不管A和B之間如何轉(zhuǎn)賬暇赤,轉(zhuǎn)幾次賬,事務(wù)結(jié)束后兩個用戶的錢相加起來應(yīng)該還得是5000宵凌,這就是事務(wù)的一致性鞋囊。

⑶ 隔離性(Isolation)

 隔離性是當(dāng)多個用戶并發(fā)訪問數(shù)據(jù)庫時,比如操作同一張表時瞎惫,數(shù)據(jù)庫為每一個用戶開啟的事務(wù)溜腐,不能被其他事務(wù)的操作所干擾,多個并發(fā)事務(wù)之間要相互隔離瓜喇。

  即要達(dá)到這么一種效果:對于任意兩個并發(fā)的事務(wù)T1和T2挺益,在事務(wù)T1看來,T2要么在T1開始之前就已經(jīng)結(jié)束乘寒,要么在T1結(jié)束之后才開始矩肩,這樣每個事務(wù)都感覺不到有其他事務(wù)在并發(fā)地執(zhí)行。

  關(guān)于事務(wù)的隔離性數(shù)據(jù)庫提供了多種隔離級別肃续,稍后會介紹到黍檩。

⑷ 持久性(Durability)

 持久性是指一個事務(wù)一旦被提交了,那么對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的始锚,即便是在數(shù)據(jù)庫系統(tǒng)遇到故障的情況下也不會丟失提交事務(wù)的操作刽酱。

  例如我們在使用JDBC操作數(shù)據(jù)庫時,在提交事務(wù)方法后瞧捌,提示用戶事務(wù)操作完成棵里,當(dāng)我們程序執(zhí)行完成直到看到提示后,就可以認(rèn)定事務(wù)以及正確提交姐呐,即使這時候數(shù)據(jù)庫出現(xiàn)了問題殿怜,也必須要將我們的事務(wù)完全執(zhí)行完成,否則就會造成我們看到提示事務(wù)處理完畢曙砂,但是數(shù)據(jù)庫因為故障而沒有執(zhí)行事務(wù)的重大錯誤头谜。


1,臟讀(我讀到了你未提交事物的數(shù)據(jù))

 臟讀是指在一個事務(wù)處理過程里讀取了另一個未提交的事務(wù)中的數(shù)據(jù)鸠澈。

2柱告,不可重復(fù)讀(再一個事物中,我第一次讀你沒修改笑陈,第二次讀你修改提交了)

 不可重復(fù)讀是指在對于數(shù)據(jù)庫中的某個數(shù)據(jù)际度,一個事務(wù)范圍內(nèi)多次查詢卻返回了不同的數(shù)據(jù)值,這是由于在查詢間隔涵妥,被另一個事務(wù)修改并提交了乖菱。

3,幻讀

我把表中的所有1改為2,還沒提交窒所,然后你查進(jìn)了一條數(shù)據(jù)1并提交娜氏,然后我就產(chǎn)生幻覺了,怎么肥死,有一個1沒有變成2.

幻讀和不可重復(fù)讀的區(qū)別就是墩新,不可重復(fù)查詢的是同一個數(shù)據(jù)項贸弥,而幻讀確是一批數(shù)據(jù)。


 現(xiàn)在來看看MySQL數(shù)據(jù)庫為我們提供的四種隔離級別:

 『Tā① Serializable (串行化):可避免臟讀绵疲、不可重復(fù)讀、幻讀的發(fā)生臣疑。

  默認(rèn)② Repeatable read (可重復(fù)讀):可避免臟讀盔憨、不可重復(fù)讀的發(fā)生。

 ⊙渡颉③ Read committed (讀已提交):可避免臟讀的發(fā)生郁岩。

  ④ Read uncommitted (讀未提交):最低級別缺狠,任何情況都無法保證问慎。

2.數(shù)據(jù)庫索引的實現(xiàn)原理

數(shù)據(jù)庫索引,是數(shù)據(jù)庫管理系統(tǒng)中一個排序的數(shù)據(jù)結(jié)構(gòu)挤茄,以協(xié)助快速查詢如叼、更新數(shù)據(jù)庫表中數(shù)據(jù)。索引的實現(xiàn)通常使用B樹及其變種B+樹穷劈。

索引就是一個滿足特定查找算法數(shù)據(jù)結(jié)構(gòu)笼恰,指向數(shù)據(jù)。

代價:1.存儲空間 ????2.插入修改數(shù)據(jù)的話 索引也要變歇终,花時間

優(yōu)點:1.數(shù)據(jù)唯一性????2.加快數(shù)據(jù)查詢????3.加快分組和排序????4.加快表連接

可以加索引的列:1.經(jīng)常搜索的? ? 2.主鍵? ? 3.經(jīng)常用于連接的外鍵社证,加快連接

不該用的列:1.查的很少? ? 2.數(shù)據(jù)值很少(男女)

索引類型:

1.唯一索引

不允許索引值重復(fù),比如姓名

2.主鍵索引

唯一索引的特定類型评凝,數(shù)據(jù)庫自動為主鍵創(chuàng)建索引

3.聚集索引

索引值的邏輯順序規(guī)定其物理順序追葡,主鍵自動聚集索引,且唯一肥哎。

書本的分類為邏輯順序辽俗,書本的擺放為物理順序疾渣,邏輯分類決定了物理擺放位置(分類擺放)

局部性原理與磁盤預(yù)讀

局部性原理就是篡诽,當(dāng)一個數(shù)據(jù)要被使用事,通常附近的數(shù)據(jù)也要被使用榴捡,程序運(yùn)行時所需數(shù)據(jù)集中杈女。

磁盤所以為了提高I/O效率(本來磁盤很慢,讀取效率是主存 的幾百分之一)旭从,所以每次預(yù)讀一頁或者幾頁

頁是存儲器的邏輯塊(通常4k)

數(shù)據(jù)庫索引為什么要用 B+ 樹而不用紅黑樹呢淋袖?

索引的結(jié)構(gòu)組織要盡量減少查找過程中磁盤I/O的存取次數(shù) 每次預(yù)讀頁的倍數(shù)

B-/B+樹剛好滿足姆打,子節(jié)點多根吁,存的元素多聋呢,紅黑樹就2個子節(jié)點损搬,浪費空間郭宝。

B-/B+樹的深度低重虑,所以i/o次數(shù)少蝇裤。

3.數(shù)據(jù)庫的鎖

鎖包括行級鎖廷支、表級鎖、悲觀鎖栓辜、樂觀鎖

? ? ?行級鎖:一種它鎖恋拍,防止另外事務(wù)修改此行

? ? 表級鎖:行共享 (ROW SHARE)??????行排他(ROW EXCLUSIVE)??????共享鎖(SHARE)????共享行排他(SHARE ROW EXCLUSIVE)?????排他(EXCLUSIVE)

悲觀鎖:

事務(wù)每次去操作數(shù)據(jù)的時候都假設(shè)有其他事務(wù)會修改需要訪問的數(shù)據(jù),每次我都有人跟我搶藕甩!

所以我要求在操作之前先上鎖施敢,實現(xiàn)靠數(shù)據(jù)庫的鎖機(jī)制

樂觀鎖:

每次去拿數(shù)據(jù)的時候都認(rèn)為別人不會修改,所以不會上鎖狭莱,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數(shù)據(jù)僵娃,可以使用版本號等機(jī)制。樂觀鎖適用于多讀的應(yīng)用類型

4.聚簇索引和非聚簇索引

5.數(shù)據(jù)庫的三級封鎖協(xié)議

基本的封鎖類型有兩種:

排它鎖(Exclusive locks 簡記為X鎖)寫鎖

共享鎖(Share locks 簡記為S鎖)讀鎖

?1 級封鎖協(xié)議是:事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖腋妙,直到事務(wù)結(jié)束才釋放悯许。事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束(ROLLBACK)。

?2級封鎖協(xié)議是:1級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖辉阶,讀完后即可釋放S鎖先壕。2級封鎖協(xié)議除防止了丟失修改,還可進(jìn)一步防止讀"臟"數(shù)據(jù)谆甜。

3級封鎖協(xié)議是:1級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖垃僚,直到事務(wù)結(jié)束才釋放。3級封鎖協(xié)議除防止了丟失修改和不讀'臟'數(shù)據(jù)外规辱,還進(jìn)一步防止了不可重復(fù)讀谆棺。

6.MyISAM與InnoDB區(qū)別及選擇

選擇:

因為MyISAM相對簡單所以在效率上要優(yōu)于InnoDB.如果系統(tǒng)讀多,寫少罕袋。對原子性要求低改淑。那么MyISAM最好的選擇。且MyISAM恢復(fù)速度快浴讯《湎模可直接用備份覆蓋恢復(fù)。

如果系統(tǒng)讀少榆纽,寫多的時候仰猖,尤其是并發(fā)寫入高的時候捏肢。InnoDB就是首選了。

兩種類型都有自己優(yōu)缺點饥侵,選擇那個完全要看自己的實際類弄鸵赫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市躏升,隨后出現(xiàn)的幾起案子辩棒,更是在濱河造成了極大的恐慌,老刑警劉巖膨疏,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盗温,死亡現(xiàn)場離奇詭異,居然都是意外死亡成肘,警方通過查閱死者的電腦和手機(jī)卖局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來双霍,“玉大人砚偶,你說我怎么就攤上這事∪髡ⅲ” “怎么了染坯?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丘逸。 經(jīng)常有香客問我单鹿,道長,這世上最難降的妖魔是什么深纲? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任仲锄,我火速辦了婚禮,結(jié)果婚禮上湃鹊,老公的妹妹穿的比我還像新娘儒喊。我一直安慰自己,他們只是感情好币呵,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布怀愧。 她就那樣靜靜地躺著,像睡著了一般余赢。 火紅的嫁衣襯著肌膚如雪芯义。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天妻柒,我揣著相機(jī)與錄音扛拨,去河邊找鬼。 笑死蛤奢,一個胖子當(dāng)著我的面吹牛鬼癣,可吹牛的內(nèi)容都是我干的陶贼。 我是一名探鬼主播啤贩,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼待秃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痹屹?” 一聲冷哼從身側(cè)響起章郁,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎志衍,沒想到半個月后暖庄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡楼肪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年培廓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片春叫。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肩钠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暂殖,到底是詐尸還是另有隱情价匠,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布呛每,位于F島的核電站踩窖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晨横。R本人自食惡果不足惜洋腮,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望手形。 院中可真熱鬧徐矩,春花似錦、人聲如沸叁幢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曼玩。三九已至鳞骤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間黍判,已是汗流浹背豫尽。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留顷帖,地道東北人美旧。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓渤滞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榴嗅。 傳聞我的和親對象是個殘疾皇子妄呕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容