MySQL邏輯架構:安全
連接管理與安全性:架構
MySQL5.5或更高版本版本提供了一個API,支持線程池(Thread-Pooling)插件,能夠使用池中的少許線程來服務大量的鏈接。併發
優化與並行:優化
MySQL會解析查詢,並建立解析樹,而後對其進行各類優化,包括重寫查詢,決定表的讀取順序,以及選擇合適的索引等。spa
併發控制:插件
1.讀寫鎖:線程
讀鎖爲共享鎖,相互不阻塞。寫鎖爲排他鎖,持有寫鎖會阻塞其餘讀寫操做。blog
2.鎖粒度:索引
表鎖:寫操做(增刪改)會鎖住整張表。事務
行級鎖:寫操做僅鎖住修改的行。
事務:
事務就是一組原子性的SQL操做。
START TRANSACTION;
......
COMMIT;
特性:ACID(原子性、一致性、隔離性、持久性)。
隔離級別:
事務之間的相互可見程度。
READ UNCOMMITTED 髒讀、不可重複讀、幻讀
READ COMMITTED 不可重複讀、幻讀
REPEATABLE READ 幻讀
SERIALIZABLE 加鎖讀
假設有連個併發的事務A、B
1.A事務修改某行未提交,B事務查詢,則髒讀。
2.A事務修改某行提交,B事務在A事務前與提交後均查詢,兩次結果不一樣,即不可重複讀。
3.A事務新增某行提交,B事務在A事務提交前範圍查詢,提交後又範圍查詢,多查出新增行,即幻讀。
4.全部事務串行執行,加鎖讀。
死鎖:
事務1
START TRANSACTION;
update stockPrice set close = 45.50 where stock_id=4 and date = '2002-05-01';
update stockPrice set close = 19.80 where stock_id=3 and date = '2002-05-02';
COMMIT;
事務2
START TRANSACTION;
update stockPrice set high= 20.12 where stock_id=3 and date = '2002-05-02';
update stockPrice set high = 47.20 where stock_id=4 and date = '2002-05-01';
COMMIT;
湊巧兩條事務都執行了第一行,持有了對方的鎖。要執行第二行的時候須要對方釋放鎖,會形成死鎖。
InnoDB存儲引擎會檢查死鎖的循環依賴並返回一個錯誤,處理方式是將持有最少行級排他鎖的事務回滾。
InnoDB存儲引擎:
1.支持事務。
2.自動崩潰恢復。
MyISAM存儲引擎:
1.不支持事務。
2.不支持自動崩潰恢復
3.能夠壓縮表(只讀),壓縮表能夠極大減小磁盤空間