1. 程式人生 > 其它 >1.MySQL面試題總結

1.MySQL面試題總結

一.事務(transaction)

1.事務的四大特性:ACID

原子性(Atomicity):一個事務的全部操作要麼全部成功,要麼全部失敗回滾

一致性(Consistency):一個事務執行之前和執行之後都必須處於一致性狀態。比如a與b賬戶共有1000塊,兩人之間轉賬之後無論成功還是失敗,它們的賬戶總和還是1000。

隔離性(Isolation):跟隔離級別相關,如read committed,一個事務只能讀到已經提交的修改。

永續性(Durability):一個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的。即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

2.事務的隔離級別

(1)幾個概念:髒讀,不可重複讀,幻讀

不可重複讀和髒讀的區別是,髒讀是某一事務讀取了另一個事務未提交的髒資料,而不可重複讀則是讀取了前一事務提交的資料。 幻讀和不可重複讀都是讀取了另一條已經提交的事務,不同的是不可重複讀的重點是修改,幻讀的重點在於新增或者刪除

(2)有4中隔離級別:

Read uncommitted(讀未提交):一個事務可以看到其他未提交事務的執行結果

Read committed(讀已提交):一個事務只能看到其他已提交事務的執行結果。可避免髒讀的發生

Repeatable read (可重複讀):MySQL的預設事務隔離級別。它確保同一事務的多個例項在併發讀取資料時,會看到同樣的資料行。解決了不可重複讀的問題

Serializable(序列化):通過強制事務排序,使之不可能相互衝突。從而解決幻讀問題

二.索引

1.定義:索引就相當於key-value的key

2.索引的作用
(1)B+樹的高度一般在2-4層,最多隻需要讀取2-4次磁碟,查詢速度大大提升

(2)

什麼情況下需要建索引:

  1. 經常用於查詢的欄位
  2. 經常用於連線的欄位(如外來鍵)建立索引,可以加快連線的速度
  3. 經常需要排序的欄位建立索引,因為索引已經排好序,可以加快排序查詢速度

什麼情況下不建索引?

    1. where條件中用不到的欄位不適合建立索引
    2. 表記錄較少
    3. 需要經常增刪改
    4. 參與列計算的列不適合建索引
    5. 區分度不高的欄位不適合建立索引,性別等

3.B+樹

(1)B樹:平衡多路查詢樹。其實就是二叉查詢樹的擴充套件情況

(2)B樹和B+樹的樹結構

4.索引例項
5.索引分類+約束分類

6.最左匹配(最左字首原則)

7.聚簇索引 / 非聚簇索引

8.覆蓋索引

9.索引失效

三.儲存引擎

四.MVCC

五.分庫分表

六.MySQL架構