與其餘數據庫例如Oracle 和SQL Server等數據庫中只有一種存儲引擎不一樣的是,MySQL有一個被稱爲「Pluggable Storage Engine Architecture」(可替換存儲引擎架構)的特性,也就意味着MySQL數據庫提供了多種存儲引擎。用戶能夠根據不一樣的需求爲數據表選擇不一樣的存儲引擎,用戶也能夠根據本身的須要編寫本身的存儲引擎。MySQL數據庫在實際的工做中其實分爲了語句分析層和存儲引擎層,其中語句分析層就主要負責與客戶端完成鏈接而且事先分析出SQL語句的內容和功能,而存儲引擎層則主要負責接收來自語句分析層的分析結果,完成相應的數據輸入輸出和文件操做。簡而言之,就是如何存儲數據、如何爲存儲的數據創建索引和如何更新、查詢數據等技術的實現方法。由於在關係數據庫中數據的存儲是以表的形式存儲的,因此存儲引擎也能夠稱爲表類型(即存儲和操做此表的類型)。mysql
存儲引擎 | 說明 |
---|---|
MyISAM | 高速引擎,擁有較高的插入,查詢速度,但不支持事務 |
InnoDB | 5.5版本後MySQL的默認數據庫,支持事務和行級鎖定,比MyISAM處理速度稍慢 |
ISAM | MyISAM的前身,MySQL5.0之後再也不默認安裝 |
MRG_MyISAM(MERGE) | 將多個表聯合成一個表使用,在超大規模數據存儲時頗有用 |
Memory | 內存存儲引擎,擁有極高的插入,更新和查詢效率。可是會佔用和數據量成正比的內存空間。只在內存上保存數據,意味着數據可能會丟失 |
Falcon | 一種新的存儲引擎,支持事物處理,傳言多是InnoDB的替代者 |
Archive | 將數據壓縮後進行存儲,很是適合存儲大量的獨立的,做爲歷史記錄的數據,可是隻能進行插入和查詢操做 |
CSV | CSV 存儲引擎是基於 CSV 格式文件存儲數據(應用於跨平臺的數據交換) |
接下來咱們就介紹兩種在實際開發中使用最多的兩種引擎【MyISAM】和【InnoDB】。web
這種引擎是MySQL最先提供的。這種引擎又能夠分爲靜態MyISAM、動態MyISAM 和壓縮MyISAM三種:sql
固然不論是何種MyISAM表,目前它都不支持事務,行級鎖和外鍵約束的功能,這就意味着有事務處理需求的表,不能使用MyISAM存儲引擎。MyISAM存儲引擎特別適合在如下幾種狀況下使用:數據庫
MyISAM表是獨立於操做系統的,這說明能夠輕鬆地將其從Windows服務器移植到Linux服務器;每當咱們創建一個MyISAM引擎的表時,就會在本地磁盤上創建三個文件,文件名就是表名。 例如我建立了一個【test】表,那麼就會生成如下三個文件:服務器
文件名 | 說明 |
---|---|
test.frm | 存儲表定義 |
test.MYD | 存儲數據 |
test.MYI | 存儲索引 |
InnoDB表類型能夠看做是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能。InnoDB的表須要更多的內存和存儲,它會在主內存中創建其專用的緩衝池用於高速緩衝數據和索引。
使用InnoDB是最理想的選擇:架構
想要查看咱們的數據表使用了什麼存儲引擎,咱們就須要使用到咱們之前已經介紹過的【show】命令,語法以下:併發
SHOW CREATE TABLE 表名;
例如咱們查看咱們以前建立好的【user】表:svg
SHOW CREATE TABLE user;
+——-+—————————————————————————————————————————————————————————————————————————-+
| Table | Create Table |
+——-+—————————————————————————————————————————————————————————————————————————-+
| user | CREATE TABLEuser
(
userId
char(5) CHARACTER SET latin1 NOT NULL,
name
varchar(30) DEFAULT NULL,
sex
char(1) CHARACTER SET latin1 DEFAULT ‘0’,
PRIMARY KEY (userId
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+——-+—————————————————————————————————————————————————————————————————————————-+
1 row in set (0.02 sec)工具
就能夠看到【 ENGINE】顯示咱們使用的引擎爲【MyISAM】優化
變動咱們存儲表的存儲引擎將使用到的是咱們前面使用過的【ALTER】命令,語法以下:
ALTER TABLE 表名 ENGINE=新引擎;
例如,咱們將【user】表的引擎更改成【InnoDB】:
mysql> ALTER TABLE user ENGINE = InnoDB;
Query OK, 7 rows affected (0.50 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE user;
+——-+—————————————————————————————————————————————————————————————————————————-+
| Table | Create Table |
+——-+—————————————————————————————————————————————————————————————————————————-+
| user | CREATE TABLEuser
(
userId
char(5) CHARACTER SET latin1 NOT NULL,
name
varchar(30) DEFAULT NULL,
sex
char(1) CHARACTER SET latin1 DEFAULT ‘0’,
PRIMARY KEY (userId
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+——-+—————————————————————————————————————————————————————————————————————————-+
1 row in set (0.00 sec)
咱們就成功的將【user】表的存儲引擎改成了【InnoDB】
要使用事務功能,就必須將表設置爲InnoDB引擎,有的版本在安裝時,是未激活InnoDB引擎的,因此須要咱們手動進行激活。首先咱們進入MySQL的安裝目錄,找到my.ini文件。例如,博主使用的是WampServer的集成開發環境,目錄以下:
咱們右鍵選擇記事本打開後,找到【default-storage-engine】這一行,如圖:
將其修改成【default-storage-engine=InnoDB】便可,咱們就成功的將默認的引擎修改成【InnoDB】。
這裏,咱們就講解完了關於MySQL數據庫存儲引擎的有關知識,同時也爲咱們下一步講解史上最簡單MySQL教程詳解(進階篇)之事務處理作好了鋪墊,由於要實現事務管理,須要將表的存儲引擎更改成【InnoDB】