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)
什麼情況下需要建索引:
- 經常用於查詢的欄位
- 經常用於連線的欄位(如外來鍵)建立索引,可以加快連線的速度
- 經常需要排序的欄位建立索引,因為索引已經排好序,可以加快排序查詢速度
什麼情況下不建索引?
- where條件中用不到的欄位不適合建立索引
- 表記錄較少
- 需要經常增刪改
- 參與列計算的列不適合建索引
- 區分度不高的欄位不適合建立索引,性別等
3.B+樹
(1)B樹:平衡多路查詢樹。其實就是二叉查詢樹的擴充套件情況
(2)B樹和B+樹的樹結構
4.索引例項
5.索引分類+約束分類
6.最左匹配(最左字首原則)
7.聚簇索引 / 非聚簇索引
8.覆蓋索引
9.索引失效
三.儲存引擎
四.MVCC
五.分庫分表
六.MySQL架構