簡述MySQL InnoDB存儲引擎
前言:
存儲引擎是數(shù)據(jù)庫的核心,對于 MySQL 來說,存儲引擎是以插件的形式運行的。雖然 MySQL 支持種類繁多的存儲引擎,但最常用的當(dāng)屬 InnoDB 了,本篇文章將主要介紹 InnoDB 存儲引擎相關(guān)知識。
1. InnoDB 簡介
MySQL 5.5 版本以后,默認存儲引擎就是 InnoDB 了。InnoDB 是一種兼顧了高可靠性和高性能的通用存儲引擎。在 MySQL 5.7 中,除非你配置了其他默認存儲引擎,否則執(zhí)行 CREATE TABLE 不指定 ENGINE 的語句將創(chuàng)建一個 InnoDB 表。
# 查看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 優(yōu)勢
InnoDB 之所以如此受寵,主要在于其功能方面的較多優(yōu)勢。
1)支持事務(wù)
InnoDB 最重要的一點就是支持事務(wù),可以說這是 InnoDB 成為 MySQL 中最流行的存儲引擎的一個非常重要的原因。此外 InnoDB 還實現(xiàn)了 4 種隔離級別(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE),使得對事務(wù)的支持更加靈活。
2)災(zāi)難恢復(fù)性好
InnoDB 通過 commit、rollback、crash-recovery 來保障數(shù)據(jù)的安全。
具體來說,crash-recovery 就是指如果服務(wù)器因為硬件或軟件的問題而崩潰,不管當(dāng)時數(shù)據(jù)是怎樣的狀態(tài),在重啟 MySQL 后,InnoDB 都會自動恢復(fù)到發(fā)生崩潰之前的狀態(tài)。
3)使用行級鎖
InnoDB 改變了 MyISAM 的鎖機制,實現(xiàn)了行鎖。雖然 InnoDB 的行鎖機制是通過索引來完成的,但畢竟在數(shù)據(jù)庫中大部分的 SQL 語句都要使用索引來檢索數(shù)據(jù)。行鎖定機制也為 InnoDB 在承受高并發(fā)壓力的環(huán)境下增強了不小的競爭力。
4)實現(xiàn)了緩沖處理
InnoDB 提供了專門的緩沖池,實現(xiàn)了緩沖管理,不僅能緩沖索引也能緩沖數(shù)據(jù),常用的數(shù)據(jù)可以直接從內(nèi)存中處理,比從磁盤獲取數(shù)據(jù)處理速度要快。在專用數(shù)據(jù)庫服務(wù)器上,通常會將最多80%的物理 memory 分配給緩沖池。
5)支持外鍵
InnoDB 支持外鍵約束,檢查外鍵、插入、更新和刪除,以確保數(shù)據(jù)的完整性。存儲表中的數(shù)據(jù)時,每張表的存儲都按主鍵順序存放,如果沒有顯式在表定義時指定主鍵,InnoDB 會為每一行生成一個6字節(jié)的 ROWID ,并以此作為主鍵。
總結(jié):
本篇文章簡單介紹了 InnoDB 存儲引擎及其優(yōu)勢,想深入學(xué)習(xí) MySQL ,InnoDB 絕對是一塊繞不開的重點知識。關(guān)于 InnoDB 的內(nèi)容還有很多,后面有機會的話可以多寫寫。
以上就是簡述MySQL InnoDB存儲引擎的詳細內(nèi)容,更多關(guān)于MySQL InnoDB存儲引擎的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL查看數(shù)據(jù)庫連接數(shù)的方法
本文主要介紹了MySQL查看數(shù)據(jù)庫連接數(shù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08MySQL數(shù)據(jù)庫之內(nèi)置函數(shù)和自定義函數(shù) function
這篇文章主要介紹了MySQL數(shù)據(jù)庫之內(nèi)置函數(shù)和自定義函數(shù) function,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06SQL中distinct 和 row_number() over() 的區(qū)別及用法
這篇文章主要介紹了SQL中distinct 和 row_number() over() 的區(qū)別及用法的相關(guān)資料,需要的朋友可以參考下2017-03-03mysql數(shù)據(jù)庫設(shè)置utf-8編碼的方法步驟
這篇文章主要介紹了mysql數(shù)據(jù)庫設(shè)置utf-8編碼的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08MySQL修改表結(jié)構(gòu)操作命令總結(jié)
這篇文章主要介紹了MySQL修改表結(jié)構(gòu)操作命令總結(jié),包含如刪除列、添加列、修改列、添加主鍵、刪除主鍵、添加唯一索引、添加普通索引等內(nèi)容,需要的朋友可以參考下2014-12-12