在之前的文章中我們說過MySQL事務(wù),現(xiàn)在大家都應(yīng)該知道了MySQL事務(wù)了吧,還記得事務(wù)的ACID原則嗎?不記得的童鞋可以回顧一下《MySQL之事務(wù)初識》,其實(shí)呀,更嚴(yán)謹(jǐn)一點(diǎn)的話,應(yīng)該是MySQL InnoDB存儲引擎,因?yàn)樵贛ySQL中,只有InnoDB存儲引擎才支持事務(wù)。看到此處,有些朋友可能有以下疑問:
存儲引擎是什么?
MySQL中有哪些存儲引擎?
每個(gè)存儲引擎有哪些特點(diǎn)以及區(qū)別?
下面,我們帶著這些疑問,依次往下看:
存儲引擎是什么?
通俗一點(diǎn)來說,MySQL是用來保存數(shù)據(jù)的對不對?我們可以把存儲引擎看作是一種存儲文件的方式以及該方式附屬的一整套工具,其中每個(gè)存儲文件方式的特點(diǎn)就是該存儲引擎的特點(diǎn)。
例如:Memory存儲引擎將數(shù)據(jù)保存至內(nèi)存中,其優(yōu)點(diǎn)是:讀寫快,但是數(shù)據(jù)不是持久到磁盤中的,非常容易丟失等等。
MySQL中的存儲引擎
在MySQL 5.7版本中,MySQL支持的存儲引擎有:
InnoDB
MyISAM
Memory
CSV
Archive
Blackhole
Merge:
Federated
Example
下面只介紹常用的存儲引擎,其他沒介紹的存儲引擎,有興趣的童鞋,可以自己自行搜索。
InnoDB:支持事務(wù)操作(如 begin, commit,rollback命令),支持行級鎖,行級鎖相對于表鎖,其粒度更細(xì),允許并發(fā)量更大,這里面細(xì)節(jié)還挺多的,下次,我們單獨(dú)寫一篇)支持外鍵引用完整性約束。InnoDB存儲引擎也是MySQL 5.7版本中默認(rèn)的存儲引擎。其缺點(diǎn)是:存儲空間會占用比較大。
MyISAM:該存儲引擎存儲占用的空間相對與InnoDB存儲引擎來說會少很多,但其支持的為表鎖,其并發(fā)性能會低很多,而且不支持事務(wù),通常只應(yīng)用于只讀模式的應(yīng)用。它是MySQL最原始的存儲引擎。
Memory:該存儲引擎最大的特點(diǎn)是,所有數(shù)據(jù)均保存在內(nèi)存中,之前還有個(gè)名字叫做 「Heap」。
應(yīng)用場景: 主要存儲一些需要快速訪且非關(guān)鍵數(shù)據(jù),為什么不是關(guān)鍵數(shù)據(jù)呢?就因?yàn)槠渌袛?shù)據(jù)保存在內(nèi)存中,也可以理解為不安全。
CSV:首先先認(rèn)識一下CSV,CSV文件其實(shí)就是用逗號分隔開的文本文件,常用于數(shù)據(jù)轉(zhuǎn)換,該類型平時(shí)用的比較少,不支持索引。
Archive:存檔文件,主要用于存儲很少用到的引用文件,
Example:該存儲引擎主要用于展示如何自行編寫一個(gè)存儲引擎,一般不會用作生產(chǎn)環(huán)境使用。
如何選擇存儲引擎
大家通過上面的比較應(yīng)該已經(jīng)看出來了,InnoDB存儲引擎是支持事務(wù),支持外鍵并支持行級鎖的。對于需要在線事務(wù)處理的應(yīng)用最合適不過了,我們在選擇存儲引擎時(shí),如果沒有特別的理由,我的建議是選擇InnoDB作為存儲引擎。
1、我們可以在創(chuàng)建table時(shí),指定存儲引擎,如果未指定,則使用默認(rèn)的存儲引擎。
新聞熱點(diǎn)
疑難解答
圖片精選