史上最簡單MySQL教程詳解(進階篇)之存儲引擎介紹及默認引擎設置

什麼是存儲引擎?

與其餘數據庫例如Oracle 和SQL Server等數據庫中只有一種存儲引擎不一樣的是,MySQL有一個被稱爲「Pluggable Storage Engine Architecture」(可替換存儲引擎架構)的特性,也就意味着MySQL數據庫提供了多種存儲引擎。用戶能夠根據不一樣的需求爲數據表選擇不一樣的存儲引擎,用戶也能夠根據本身的須要編寫本身的存儲引擎。MySQL數據庫在實際的工做中其實分爲了語句分析層和存儲引擎層,其中語句分析層就主要負責與客戶端完成鏈接而且事先分析出SQL語句的內容和功能,而存儲引擎層則主要負責接收來自語句分析層的分析結果,完成相應的數據輸入輸出和文件操做。簡而言之,就是如何存儲數據、如何爲存儲的數據創建索引和如何更新、查詢數據等技術的實現方法。由於在關係數據庫中數據的存儲是以表的形式存儲的,因此存儲引擎也能夠稱爲表類型(即存儲和操做此表的類型)。mysql

MySQL存儲引擎種類

存儲引擎 說明
MyISAM 高速引擎,擁有較高的插入,查詢速度,但不支持事務
InnoDB 5.5版本後MySQL的默認數據庫,支持事務和行級鎖定,比MyISAM處理速度稍慢
ISAM MyISAM的前身,MySQL5.0之後再也不默認安裝
MRG_MyISAM(MERGE) 將多個表聯合成一個表使用,在超大規模數據存儲時頗有用
Memory 內存存儲引擎,擁有極高的插入,更新和查詢效率。可是會佔用和數據量成正比的內存空間。只在內存上保存數據,意味着數據可能會丟失
Falcon 一種新的存儲引擎,支持事物處理,傳言多是InnoDB的替代者
Archive 將數據壓縮後進行存儲,很是適合存儲大量的獨立的,做爲歷史記錄的數據,可是隻能進行插入和查詢操做
CSV CSV 存儲引擎是基於 CSV 格式文件存儲數據(應用於跨平臺的數據交換)

接下來咱們就介紹兩種在實際開發中使用最多的兩種引擎【MyISAM】和【InnoDB】。web

MyISAM 引擎

這種引擎是MySQL最先提供的。這種引擎又能夠分爲靜態MyISAM、動態MyISAM 和壓縮MyISAM三種:sql

  • 靜態MyISAM:若是數據表中的各數據列的長度都是預先固定好的,服務器將自動選擇這種表類型。由於數據表中每一條記錄所佔用的空間都是同樣的,因此這種表存取和更新的效率很是高。當數據受損時,恢復工做也比較容易作。
  • 動態MyISAM:若是數據表中出現varchar、xxxtext或xxxBLOB字段時,服務器將自動選擇這種表類型。相對於靜態MyISAM,這種表存儲空間比較小,但因爲每條記錄的長度不一,因此屢次修改數據後,數據表中的數據就可能離散的存儲在內存中,進而致使執行效率降低。同時,內存中也可能會出現不少碎片。所以,這種類型的表要常常用optimize table 命令或優化工具來進行碎片整理。
  • 壓縮MyISAM:以上說到的兩種類型的表均可以用myisamchk工具壓縮。這種類型的表進一步減少了佔用的存儲,可是這種表壓縮以後不能再被修改。另外,由於是壓縮數據,因此這種表在讀取的時候要先時行解壓縮。

固然不論是何種MyISAM表,目前它都不支持事務,行級鎖和外鍵約束的功能,這就意味着有事務處理需求的表,不能使用MyISAM存儲引擎。MyISAM存儲引擎特別適合在如下幾種狀況下使用:數據庫

  • 選擇密集型的表。MyISAM存儲引擎在篩選大量數據時很是迅速,這是它最突出的優勢。
  • 插入密集型的表。MyISAM的併發插入特性容許同時選擇和插入數據。

MyISAM表是獨立於操做系統的,這說明能夠輕鬆地將其從Windows服務器移植到Linux服務器;每當咱們創建一個MyISAM引擎的表時,就會在本地磁盤上創建三個文件,文件名就是表名。 例如我建立了一個【test】表,那麼就會生成如下三個文件:服務器

文件名 說明
test.frm 存儲表定義
test.MYD 存儲數據
test.MYI 存儲索引

InnoDB引擎

InnoDB表類型能夠看做是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能。InnoDB的表須要更多的內存和存儲,它會在主內存中創建其專用的緩衝池用於高速緩衝數據和索引。
使用InnoDB是最理想的選擇:架構

  • 更新密集的表:InnoDB存儲引擎特別適合處理多重併發的更新請求。
  • 事務:InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。
  • 自動災難恢復:與其它存儲引擎不一樣,InnoDB表可以自動從災難中恢復。
  • 外鍵約束:MySQL支持外鍵的存儲引擎只有InnoDB。
  • 支持自動增長列AUTO_INCREMENT屬性。

存儲引擎操做

查看存儲引擎

想要查看咱們的數據表使用了什麼存儲引擎,咱們就須要使用到咱們之前已經介紹過的【show】命令,語法以下:併發

SHOW CREATE TABLE 表名;

例如咱們查看咱們以前建立好的【user】表:svg

SHOW CREATE TABLE user;
+——-+—————————————————————————————————————————————————————————————————————————-+
| Table | Create Table |
+——-+—————————————————————————————————————————————————————————————————————————-+
| user | CREATE TABLE user (
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 TABLE user (
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】

相關文章
相關標籤/搜索