mysql基礎(chǔ)概念

MySQL

1 數(shù)據(jù)庫事務(wù)的特性(ACID)

A, atomacity 原子性 事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。
             通常,與某個(gè)事務(wù)關(guān)聯(lián)的操作具有共同的目標(biāo),并且是相互依賴的。如果系統(tǒng)只執(zhí)行這些操作的一個(gè)子集,
             則可能會(huì)破壞事務(wù)的總體目標(biāo)。原子性消除了系統(tǒng)處理操作子集的可能性。

C, consistency 一致性 事務(wù)將數(shù)據(jù)庫從一種一致狀態(tài)轉(zhuǎn)變?yōu)橄乱环N一致狀態(tài)。
               也就是說,事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)(各種 constraint 不被破壞)。

I, isolation 隔離性 由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。
             事務(wù)查看數(shù)據(jù)時(shí)數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),
             事務(wù)不會(huì)查看中間狀態(tài)的數(shù)據(jù)。換句話說,一個(gè)事務(wù)的影響在該事務(wù)提交前對其他事務(wù)都不可見。

D, durability 持久性 事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持。 

2 臟讀 幻讀 不可重復(fù)讀

3 事物隔離級別

1 讀未提交(Read uncommitted)               
    就是一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)。
2 讀提交(Read committed)                 
    就是一個(gè)事務(wù)要等另一個(gè)事務(wù)提交后才能讀取數(shù)據(jù)。
3 重復(fù)讀(Repeatable read)    重復(fù)讀是 Mysql 的默認(rèn)隔離級           
    就是在開始讀取數(shù)據(jù)(事務(wù)開啟)時(shí),不再允許修改操作
4 Serializable 序列化     
    最高的事務(wù)隔離級別,在該級別下,事務(wù)串行化順序執(zhí)行,
    可以避免臟讀、不可重復(fù)讀與幻讀。但是這種事務(wù)隔離級別效率低下,比較耗數(shù)據(jù)庫性能

4 事物隔離的實(shí)現(xiàn)

1 行級鎖   INNODB引擎
          行級鎖是Mysql中鎖定粒度最細(xì)的一種鎖,表示只針對當(dāng)前操作的行進(jìn)行加鎖。
          行級鎖能大大減少數(shù)據(jù)庫操作的沖突。其加鎖粒度最小,但加鎖的開銷也最大。行級鎖分為共享鎖 和 排他鎖。
          
    特點(diǎn)      開銷大,加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。
    
2 表級鎖   MYISAM引擎
          表級鎖是MySQL中鎖定粒度最大的一種鎖,表示對當(dāng)前操作的整張表加鎖,它實(shí)現(xiàn)簡單,資源消耗較少,
          被大部分MySQL引擎支持。最常使用的MYISAM與INNODB都支持表級鎖定。表級鎖定分為表共享讀鎖(共享鎖)與表獨(dú)占寫鎖(排他鎖)。
          
    特點(diǎn)      開銷小,加鎖快;不會(huì)出現(xiàn)死鎖;鎖定粒度大,發(fā)出鎖沖突的概率最高,并發(fā)度最低。
    
3 頁級鎖   BDB引擎
          頁級鎖是MySQL中鎖定粒度介于行級鎖和表級鎖中間的一種鎖。表級鎖速度快,但沖突多,行級沖突少,但速度慢。
          所以取了折衷的頁級,一次鎖定相鄰的一組記錄。
            
    特點(diǎn)      開銷和加鎖時(shí)間界于表鎖和行鎖之間;會(huì)出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般

5 SQL的生命周期

1   應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器建立一個(gè)連接
2   數(shù)據(jù)庫進(jìn)程拿到請求sql
3   解析并生成執(zhí)行計(jì)劃,執(zhí)行
4   讀取數(shù)據(jù)到內(nèi)存并進(jìn)行邏輯處理
5   通過步驟一的連接,發(fā)送結(jié)果到客戶端
6   關(guān)掉連接,釋放資源

6 樂觀鎖與悲觀所

1   樂觀鎖     每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在提交更新的時(shí)候會(huì)判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù)。
              樂觀鎖適用于讀多寫少的應(yīng)用場景,這樣可以提高吞吐量。
2   悲觀鎖     先獲取鎖,再進(jìn)行業(yè)務(wù)操作,即“悲觀”的認(rèn)為獲取鎖是非常有可能失敗的,因此要先確保獲取鎖成功再進(jìn)行業(yè)務(wù)操作。

7 索引

1   主鍵索引:   數(shù)據(jù)列不允許重復(fù),不允許為NULL.一個(gè)表只能有一個(gè)主鍵
2   唯一索引:   數(shù)據(jù)列不允許重復(fù),允許為NULL值,一個(gè)表允許多個(gè)列創(chuàng)建唯一索引。
3   普通索引:   基本的索引類型,沒有唯一性的限制,允許為NULL值。
4   全文索引:   是目前搜索引擎使用的一種關(guān)鍵技術(shù)。

8 最左前綴

最左優(yōu)先,在創(chuàng)建多列索引時(shí),要根據(jù)業(yè)務(wù)需求,where子句中使用最頻繁的一列放在最左邊

9 索引算法 BTree Hash

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容