1.1 mysql邏輯結構mysql
第一層: 負責鏈接處理,受權認證,安全等事情sql
第二層:負責mysql的大部分核心功能 ,查詢解析,分析,優化,緩存和全部的內置函數,全部跨存儲引擎的功能都在這一層實現,,存儲過程,視圖,觸發器等數據庫
第三層:存儲引擎,負責mysql中數據的提取和存儲;緩存
1.2 併發控制——安全
共享鎖:也叫讀鎖,讀鎖是共享的,多個鏈接能夠同時獲取數據並互不干擾!併發
排他鎖:也叫寫鎖,排他性,阻塞其餘的寫鎖和讀鎖;在同一時間內,只能有一個用戶執行寫入操做,而且防止其餘用戶進行讀取正在寫入的同一資源,函數
鎖粒度 性能
表鎖:表鎖是mysql中最基本的鎖策略,而且是開銷最小的策略,它鎖定整張表,當有用戶對它進行(insert,delete,update)操做時,首先獲取寫鎖,阻塞其餘的用戶進行讀寫操做!優化
read local 表鎖在特定的狀況下能夠支持某些類型的併發寫操做,,此外寫鎖擁有更高的優先級,所以一個寫鎖的請求可能會被插入到讀鎖隊列的前面隊列
行級鎖:行級鎖能夠最大程度的支持併發處理,同時也會對性能開銷更大!
1.3 事物管理
原子性:一個事務必須被認爲是一個不能夠分割的最小工做單元,事務內的操做要麼所有提交成功,要麼失敗回滾,對於事務來講不能只執行其中的一部分!這就是事務的原子性
一致性:數據庫老是從一個一致性狀態轉移到另外一個一致性狀態
隔離性:一個事務中所作的操做在未最終提交前,對其餘事務是不可見的
持久性:一旦事務提交,則其所作的修改就會永久的保存到數據庫中!
併發狀況下帶來的問題
一、髒讀:事務A讀取了事務B更新的數據,而後B回滾操做,那麼A讀取到的數據是髒數據
二、不可重複讀:事務 A 屢次讀取同一數據,事務 B 在事務A屢次讀取的過程當中,對數據做了更新並提交,致使事務A屢次讀取同一數據時,結果 不一致。
三、幻讀:系統管理員A將數據庫中全部學生的成績從具體分數改成ABCDE等級,可是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像產生了幻覺同樣,這就叫幻讀。
mysql在的innoDB和XtraDB經過多版本併發控制(MVCC,Multiversion Concurrency Control)解決了幻讀的問題
小結:不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住知足條件的行,解決幻讀須要鎖表
事務隔離級別