InnoDB存儲引擎簡介

前言:html

存儲引擎是數據庫的核心,對於 MySQL 來講,存儲引擎是以插件的形式運行的。雖然 MySQL 支持種類繁多的存儲引擎,但最經常使用的當屬 InnoDB 了,本篇文章將主要介紹 InnoDB 存儲引擎相關知識。mysql

1. InnoDB 簡介

MySQL 5.5 版本之後,默認存儲引擎就是 InnoDB 了。 InnoDB 是一種兼顧了高可靠性和高性能的通用存儲引擎。在 MySQL 5.7 中,除非你配置了其餘默認存儲引擎,不然執行 CREATE TABLE 不指定 ENGINE 的語句將建立一個 InnoDB 表。sql

# 查看MySQL支持的存儲引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

# 查看默認存儲引擎
mysql> show variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+

2. InnoDB 優點

InnoDB 之因此如此受寵,主要在於其功能方面的較多優點。數據庫

1)支持事務安全

InnoDB 最重要的一點就是支持事務,能夠說這是 InnoDB 成爲 MySQL 中最流行的存儲引擎的一個很是重要的緣由。此外 InnoDB 還實現了 4 種隔離級別(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE),使得對事務的支持更加靈活。服務器

2)災難恢復性好併發

InnoDB 經過 commit、rollback、crash-recovery 來保障數據的安全。app

具體來講,crash-recovery 就是指若是服務器由於硬件或軟件的問題而崩潰,無論當時數據是怎樣的狀態,在重啓 MySQL 後,InnoDB 都會自動恢復到發生崩潰以前的狀態。ide

3)使用行級鎖高併發

InnoDB 改變了 MyISAM 的鎖機制,實現了行鎖。雖然 InnoDB 的行鎖機制是經過索引來完成的,但畢竟在數據庫中大部分的 SQL 語句都要使用索引來檢索數據。行鎖定機制也爲 InnoDB 在承受高併發壓力的環境下加強了不小的競爭力。

4)實現了緩衝處理

InnoDB 提供了專門的緩衝池,實現了緩衝管理,不只能緩衝索引也能緩衝數據,經常使用的數據能夠直接從內存中處理,比從磁盤獲取數據處理速度要快。在專用數據庫服務器上,一般會將最多80%的物理 memory 分配給緩衝池。

5)支持外鍵

InnoDB 支持外鍵約束,檢查外鍵、插入、更新和刪除,以確保數據的完整性。存儲表中的數據時,每張表的存儲都按主鍵順序存放,若是沒有顯式在表定義時指定主鍵,InnoDB 會爲每一行生成一個6字節的 ROWID ,並以此做爲主鍵。

總結:

本篇文章簡單介紹了 InnoDB 存儲引擎及其優點,想深刻學習 MySQL ,InnoDB 絕對是一塊繞不開的重點知識。關於 InnoDB 的內容還有不少,後面有機會的話能夠多寫寫。

參考:

wx_blog.png

相關文章
相關標籤/搜索