MySQL 邏輯架構
連接管理與安全性
每個客戶端連接都會有一個執行緒 認證基于用戶名,原始主機資訊和密碼優化與執行
Mysql會決議查詢并進行優化 對于select會先檢查查詢快取,能夠找到就直接回傳結果集并發控制
讀寫鎖
鎖在COMMIT或ROLLBACK時自動釋放讀鎖(共享鎖)
共享,不阻塞,多個用戶可以同時讀同一個資源寫鎖(獨占鎖)
保證只有一個用戶寫入,防止其他用戶寫入或讀取資料鎖粒度
加鎖,鎖的檢查,鎖的解除都是要消耗系統資源的 加鎖的物件大小成為鎖粒度鎖策略
在鎖的開銷與資料的安全性中尋求平衡行鎖
最大程度支持并發,MySQL服務器層沒有實作,由存盤引擎實作表鎖
開銷最小 MySQL服務器可以根據自己的目的加上表鎖而忽略存盤引擎的鎖機制事務
一組原子性的SQL陳述句,要么全部執行,要么全部不執行 ACID- 原子性: 要么全部執行,要么全部不執行
- 一致性: 狀態的改變是完全的,不存在改變一半就被保存的情況
- 隔離性: 在提交前對其他事務不可見
- 持久性: 資料更改會永遠保存
隔離級別
未提交讀(Read Uncommited)
即使事務未曾提交,資料對于其他事務也是可見的.即事務可以讀取未提交的資料,也叫臟讀或讀臟資料可提交讀
即一個事務在提交之前,改變對其他事務是不可見的,又叫不可重復讀,幻讀(在一個事務讀取資料后還未提交時,另一個事務更改了資料)可重復讀
解決了幻讀和臟讀的問題可串行化
強制事務串行執行,給每一行資料加鎖死鎖
死鎖指兩個或多個事務在同一個資源上相互占用,并請求鎖定對方占用的資源,從而造成的惡性回圈 死鎖發生后,只能通過部分或完全回滾事務才能解決 例子事務日志
好處
- 避免頻繁從記憶體向磁盤中寫入資料(可以記錄下日志操作,在后臺慢慢一次寫入,所以日志檔案是追加寫)
- 便于出現故障后的恢復
Mysql中的事務
自動提交(AUTOCOMMIT)
混合使用多種存盤引擎
InnoDB: 支持事務 MyISAM: 不支持事務 不支持事務的表回滾不能撤銷更改隱式和顯式鎖定
顯式: 自動加鎖 隱式: 主動加鎖多版本并發控制(MVCC)
- 一個列保存了創建時間,一個列保存洗掉時間(時間指版本號)
- 每開始一個新的事務,系統版本號都會遞增,并把事務開始時的版本號作為事務的版本號,供與查詢到的每行版本號相匹配
MySql存盤引擎
- 表的定義存盤在.frm檔案中
- 通過show table status 'tableName'查看表的相關定義資訊
InnoDB
是MySql的默認事務型引擎,也是使用最廣泛的存盤引擎,被設計用來處理大量短期事務- 資料存盤在表空間中
- 采用MVCC實作并發,實作四種隔離級別,默認可重復讀
- 基于聚簇索引(第二索引必須包含主鍵)建立
MyISAM
缺點
- 不支持事務和行級鎖
- 資料庫崩潰后無法安全恢復
特性
- 對整張表加鎖,而不是針對行,但在讀取資料的時候依然可以插入新的資料(并發插入)
- 延遲更新索引鍵
其他引擎
CSV
用于轉化.csv檔案成資料庫里的表Memory
Archive
第三方引擎
選擇合適的引擎
除非用到某些InnoDB不具備的特性,并且沒有其他辦法可以替代,否則都應該優先選擇InnoDB引擎 最好不要混用多種存盤引擎!!!更換表的引擎
ALTER TABLE
ALTER Table name Engine = InnoDB匯入與匯出
創建與查詢
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/270985.html
標籤:MySQL
