Mysql基本概念

summerNazi發表於2018-12-25

1.資料庫引擎

1).MyISAM 、 InnoDB 、 MEMPRY 、 ARCHIVE 、 BLACKHOLE 、 CSV
    A).MyISAM:提供高速儲存和檢索,以及全文搜尋能力
        a).表級鎖
        b).不支援事物
        c).每個表生成三個檔案(.frm表結構 / .MYD資料 / .MYI索引)
        d).查詢快
    B).InnoDB:具有提交、回滾和崩潰恢復能力的事務安全(ACID相容)儲存引擎
        a).表級鎖、行級鎖
        b).支援事物與外來鍵
        c).每個表生成三個檔案(.frm表結構 / .idb索引和資料)
        d).操作快(增刪改)

2.資料庫索引

1).索引定義
    A).索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構
    B).索引是表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單
    C).索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
2).索引型別
    A).普通索引 normal
    B).唯一索引 unique
    C).主鍵索引(一種特殊的唯一索引,一個表只能有一個主鍵,不允許有空值)
    D).組合索引(最左原則)
    E).全文索引fulltext
3).聚簇索引的葉子節點就是資料節點,而非聚簇索引的葉子節點仍然是索引節點,只不過有指向對應資料塊的指標
    A).Innodb引擎主索引檔案和資料檔案為同一份檔案(主鍵的索引結構中,既儲存了主鍵值,又儲存了行資料,這種結構稱為"聚簇索引")
    B).MYISAM引擎的索引檔案(.MYI)和資料檔案(.MYD)是相互獨立的(非聚簇索引)

3.資料庫鎖

1).MySQL各儲存引擎使用了三種型別(級別)的鎖定機制:
    A).表級鎖(開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低)
    B).頁級鎖(開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般)
    C).行級鎖(開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高)
2).MySQL的表級鎖(MyISAM,MEMORY,CSV)
    A).表共享讀鎖(Table Read Lock)
    B).表獨佔寫鎖(Table Write Lock)
    
    **讀操作,不會阻塞其他使用者對同一表的讀請求,但會阻塞對同一表的寫請求**
    **寫操作,則會阻塞其他使用者對同一表的讀和寫操作**
3).MySQL的行級鎖(InnoDb,NDBCluster)(InnoDb select根據需要新增鎖)
    A).共享鎖(行級)  in share mode
    B).排他鎖(行級)  for update
    C).意向共享鎖(表級)
    D).意向排他鎖(表級)

4.資料庫事務

1).ACID
    A).原子性(Atomicity) 
    B).一致性(Consistency)
    C).隔離性(Isolation)
    D).永續性(Durability)
2).隔離等級
    A).序列化(serializable)          可避免髒讀、不可重複讀、幻讀的發生
    B).可重複讀(repeatable read)     可避免髒讀、不可重複讀的發生。(mysql預設)
    C).讀已提交(read committed)        可避免髒讀的發生(oracle預設)
    D).讀未提交(read uncommitted)
3).髒讀、不可重複讀、幻讀
    A).髒讀(一個事務處理過程裡讀取了另一個未提交的事務中的資料)
         update account set money=money+100 where name=’B’;  (此時A通知B)
         update account set money=money - 100 where name=’A’; 
    B).不可重複讀(在對於資料庫中的某個資料,一個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另一個事務修改並提交了)
    C).幻讀(事務非獨立執行時發生的一種現象)