MySQL存儲引擎介紹
MySQL之存儲引擎
本節目錄
首先確定一點,存儲引擎的概念是MySQL里面才有的,不是所有的關系型數據庫都有存儲引擎這個概念,后面我們還會說,但是現在要確定這一點。
在講清楚什么是存儲引擎之前,我們先來個比喻,我們都知道錄制一個視頻文件,可以轉換成不同的格式,例如mp4,avi,wmv等,而存在我們電腦的磁盤上也會存在於不同類型的文件系統中如windows里常見的ntfs、fat32,存在於linux里常見的ext3,ext4,xfs,但是,給我們或者用戶看懂實際視頻內容都是一樣的。直觀區別是,占用系統的空間大小與清晰程度可能不一樣。
那么數據庫表里的數據存儲在數據庫里及磁盤上和上述的視頻格式及存儲磁盤文件的系統格式特征類似,也有很多種存儲方式。
但是對於用戶和應用程序來說同樣一張表的數據,無論用什么引擎來存儲,用戶能夠看到的數據是一樣的。不同儲引擎存取,引擎功能,占用空間大小,讀取性能等可能有區別。說白了,存儲引擎就是在如何存儲數據、提取數據、更新數據等技術方法的實現上,底層的實現方式不同,那么就會呈現出不同存儲引擎有着一些自己獨有的特點和功能,對應着不同的存取機制。
因為在關系數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即:對表的存儲、操作等的實現方法不同),表是什么,表本質上就是磁盤上的文件。
其實MySQL支持多種存儲引擎,每種引擎有着一些自己獨特的功能,用戶在使用的時候,可以根據自己的業務場景來使用不同的存儲引擎,其中MySQL最常用的存儲引擎為:MyISAM和InnoDB。
在詳細介紹這些存儲引擎之前,我們先來看看MySQL的整個工作流程,看一下存儲引擎在哪里,MySQL都做了哪些事情。
看下圖:這是我在MySQL官方手冊上拿下來的(手冊你如果能夠玩好,將來你就能做一個NB的DBA~~~)
英文版的看着很難受啊超哥,好好好,給你來個中文的,看下圖:
來,看每個部分的解釋,看下圖:
搞明白整個過程之后,我們來細說一下這些存儲引擎,看下一節~~~
前面我們對MySQL進行操作的時候並沒有指定存儲引擎,為什么還能用呢,沒有指定還能用,說明什么,說明MySQL默認有一個存儲引擎,我記得MySQL5.5之前,默認的存儲引擎是MyISAM,之后都改為InnoDB了,我們的重點就是這個InnoDB,也是公司中最常用的、最好用的引擎,但是還是一些公司在用MyISAM引擎,除了歷史原因之外,還有MyISAM的效率比InnoDB高一點,InnoDB在這方面做了很多優化,效率已經和MyISAM差不多了,但是InnoDB引擎還有好多其他的NB的功能,下面我們就介紹幾種存儲引擎。
首先看一下咱們的默認存儲引擎:
不同的引擎代表着不同的存取機制,那么有哪些引擎呢,連接進入mysql之后,查看MySQL支持的所有存儲引擎:
1、show engines;#查看MySQL所有的引擎,
2、show variables like "storage_engine%";查看當前正在使用的引擎
注意:在存儲大文件的時候,可以存到數據庫,但是盡量別直接存到數據庫里面,會影響數據庫的效率,我們就存文件的路徑、地址,用戶想要這個大文件,我們可以到對應的路徑下取讀取這個文件給用戶。
幾種常用引擎介紹
1. MyISAM引擎




2. InnoDB引擎




總說事務,到底啥事事務?我們看看解釋:

在介紹上面兩個引擎中涉及的兩個概念(OLTP和OLAP)的介紹
參考文章:https://blog.csdn.net/zhangzheng0413/article/details/8271322/
3.其他引擎的介紹

1、創建表時指定引擎
create table innodb_t2(id int)engine=innodb;
2、在配置文件中指定默認的存儲引擎
linux:vim /etc/my.cnf windows:my.ini文件 [mysqld] default-storage-engine=INNODB #配置默認引擎,現在用的mysql默認基本都是InnoDB,所以其實都可以不用配置了 innodb_file_per_table=1 #表示獨立表空間存儲,可以不寫
3、不同引擎在創建表的時候生成文件的不同
創建四個表,分別使用innodb,myisam,memory,blackhole存儲引擎,進行插入數據測試
#下面是使用四個不同的引擎來創建的表
create table t1(id int)engine=innodb; create table t2(id int)engine=myisam; create table t3(id int)engine=memory; create table t4(id int)engine=blackhole;
通過四種引擎來創建的表,我們對照着其生成的文件來看一下區別,看下圖:
關於上面的文件作用介紹:

在Oracle 和SQL Server等所有數據存儲管理機制都是一樣的。而MySql數據庫提供了多種存儲引擎。用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。
Oracle中不存在引擎的概念,數據處理大致可以分成兩大類:聯機事務處理OLTP(on-line transaction processing)、聯機分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統的關系型數據庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。OLAP是數據倉庫系統的主要應用,支持復雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。
關於MySQL的存儲引擎大概就說這么多吧~~~有興趣或者有基礎的同學,可以多去學一下MySQL官方手冊~~收獲會有很多~~~那么我們就繼續回到我們的數據表操作去學習吧~~~