innodb是 mysql 預設的事務型儲存引擎,也是最重要、使用最廣泛的儲存引擎。只有在需要它不支援的特性時,才考慮使用其它儲存引擎。被設計用來處理大量的短期事務,短期事務大部分情況是正常提交的,很少會被回滾。
innodb採用多版本併發控制(mvcc)來支援高併發,並且實現了四個標準的隔離級別,預設級別是可重複讀(repeatable read)。在可重複讀隔離級別下,通過多版本併發控制(mvcc)+ 間隙鎖(next-key locking)防止幻影讀。間隙鎖使得innodb不僅僅鎖定查詢涉及的行,還會對索引中的間隙進行鎖定,以防止幻影行的插入。
主索引是聚簇索引,在索引中儲存了資料,從而避免直接讀取磁碟,因此對查詢效能有很大的提公升。
innodb的內部做了很多優化,包括從磁碟讀取資料時採用的可**性讀、能夠加快讀操作的自適應雜湊索引並且自動建立的自適應雜湊索引、能夠加速插入操作的插入緩衝區等。
在mysql5.1及之前的版本,myisam是預設的儲存引擎。
設計簡單,資料以緊密格式儲存。對於唯讀資料,或者表比較小、可以容忍修復(repair)操作,則依然可以繼續使用它(但請不要預設使用myisam,而是應當預設使用innodb)。
提供了大量的特性,包括壓縮表、空間資料索引等。
不支援事務,不支援崩潰後的安全恢復。
不支援行級鎖,只能對整張表加鎖,讀取時會對需要讀到的所有表加共享鎖,寫入時則對錶加排它鎖。但在表有讀取操作的同時,也可以往表中插入新的記錄,這被稱為併發插入(concurrent insert)。
可以手工或者自動執行檢查和修復操作,但是和事務恢復以及崩潰恢復不同,可能導致一些資料丟失,而且修復操作是非常慢的。
如果指定了 delay_key_write 選項,在每次修改執行完成時,不會立即將修改的索引資料寫入磁碟,而是會寫到記憶體中的鍵緩衝區,只有在清理鍵緩衝區或者關閉表的時候才會將對應的索引塊寫入磁碟。這種方式可以極大的提公升寫入效能,但是在資料庫或者主機崩潰時會造成索引損壞,需要執行修復操作。
mysql內建的其他儲存引擎:
archive引擎、blackhole引擎、csv引擎、federated引擎、memory引擎、merge引擎、ndb集群引擎
15 mysql中的觸發器
觸發器,顧名思義就是當某個事情 事件 發生時候,執行某一段程式。觸發器有四大要素 監視地點 table name 監視事件 insert update delete 觸發時間 before after 觸發執行程式 insert update delete 建立觸發器 create trigger ...
mysql的儲存引擎有 mysql儲存引擎有哪些?
儲存引擎是資料庫管理系統用來從資料庫建立 讀取和更新資料的軟體模組。mysql中有兩種型別的儲存引擎 事務型和非事務型。對於mysql 5.5及更高版本,預設的儲存引擎是innodb。在5.5版本之前,mysql的預設儲存引擎是myisam。那麼mysql儲存引擎有哪些?一 innodb 這是mys...
15 MySQL運算子的優先順序
運算子的優先順序決定了不同的運算子在表示式中計算的先後順序,下表列出了 mysql 中的各類運算子及其優先順序。優先順序由低到高排列 運算子1 賦值運算 2ii or 3xor 4 and 5not 6between case when then else 7 比較運算 is like regexp...