數據庫的事務隔離級別

嘟嘟嘟,面試官的電話打過來了:你好XXX,我看你在簡歷上寫上了熟練使用Mysql數據庫,年輕人你要知道“熟練”
這兩個字可不是隨便用的,既然你說了那我就考考你啊。

此時的我慌的一批,尼瑪寫簡歷也沒啥經驗,我要是知道你會扣簡歷上的字和詞語,我絕對會是像對待女朋友那樣對待簡歷(emmm,哎請容許我用誇張的手法形容一下,誰叫我沒有女朋友…)

那你說說吧,什麼是數據庫的事務?

在這裏插入圖片描述
事務(Transaction):訪問並可能更新數據庫中各種數據項的一個程序執行單元(unit),他通常是由程序的執行產生的。當數據庫中更改數據成功時,在事務中更改的數據就會提交,不在改變,否則事務就會取消或者回滾,此時的更改就無效。

那你知道事務的四大特性嗎?

尼瑪,你這問題問的,學了數據庫的誰不知道,但是我只記得四個特性的名字,要是讓我解釋四個特性,我Tm真的不會啊,不是不會,是真的忘了啊。

尊敬的面試官您好,事務的特性我知道的。

  1. **原子性(Atomicity):**原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這樣設計可以使得當事務的操作失敗後執行過的流程不會對數據庫造成任何影響。
  2. **一致性(Consistency):**一致性是指事務必須使數據庫從一個一致性狀態轉變爲另一個一致性狀態,也就是說執行前和執行後都必須處於一致性狀態。
    打個比方:假設用戶A和用戶B兩者的錢加起來一共是5000,那麼不管A和B之間如何轉賬,轉幾次賬,事務結束後兩個用戶的錢相加起來應該還得是5000,這就是事務的一致性。
  3. **隔離性(Isolation):**隔離性是指多個用戶併發訪問數據庫的時候,比如操作同一張表的時候,數據庫爲每個用戶開區的事務不能被其他事務的操作所幹擾,多個併發任務之間需要相互隔離。
  4. 持久性(Durability): 持久性是指一個事務一旦被提交了,那麼對於數據庫的改變就是永久的,即使在數據庫系統遇到故障的時候也不會丟失提交事務的操作。
    打個比方,你買東西的時候需要記錄在賬本上,即使老闆忘記了那也有據可查

嗯,還行,你小子差不對都能答上來,那我再問問你數據庫事務個特性是通過什麼實現的?

尼瑪,問問四個特性就行了,還要問是怎麼實現的?丟,好慌,撓撓頭,咋辦啊,突然想到了老師上課在PPT上提過!!!

而事務的ACID是通過InnoDB(InnoDB是mysql的一個存儲引擎)的日誌和鎖來保證。事務的隔離性是通過數據庫鎖的機制實現的,持久性通過redo log(重做日誌)來實現,原子性和一致性通過Undo log(回撤日誌)來實現。

你小子有點東西啊,ok,那我再問你數據庫索引是用什麼數據結構實現的,爲什麼不用其他的?

我丟,啥玩意???數據庫的索引?還數據結構?此時的我着實有點慌啊!!!定睛一想,慌個錘子,知道啥就說啥!
數據庫索引的實現我記得使用的是B+樹,但是爲什麼不用其他得數據結構這個我還真的不知道啊!

是的,是使用B+樹實現的,之所以使用B+樹是因爲因爲B+樹的節點中包含的值個數(多個值)比二叉樹(1個值)更多,所以在B+樹中查詢所需要的節點數就更少,,數據庫索引使用節點大小恰好等於操作系統一頁大小的B+樹來實現是效率最高的選擇。

在這裏插入圖片描述
喔霍,這個我是真的沒有了解過,但是仔細一想平衡二叉樹和二叉排序樹,還有B樹的一些相關的東西,好像是這麼回事啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章