教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓(xùn):MySQL數(shù)據(jù)庫的存儲引擎

更新時(shí)間:2022年07月06日11時(shí)54分 來源:傳智教育 瀏覽次數(shù):

  MySQL數(shù)據(jù)庫的存儲引擎我們可以重點(diǎn)關(guān)注InnoDB、MyISAM、MEMORY這三種。

  一.InnoDB存儲引擎

  InnoDB給MySQL的表提供了事務(wù)處理、回滾、崩潰修復(fù)能力和多版本并發(fā)控制的事務(wù)安全。在MySQL從3.23.34a開始包含InnnoDB。它是MySQL上第一個(gè)提供外鍵約束的表引擎。而且InnoDB對事務(wù)處理的能力,也是其他存儲引擎不能比擬的??亢蟀姹镜腗ySQL的默認(rèn)存儲引擎就是InnoDB。

  InnoDB存儲引擎總支持AUTO_INCREMENT。自動增長列的值不能為空,并且值必須唯一。MySQL中規(guī)定自增列必須為主鍵。在插入值的時(shí)候,如果自動增長列不輸入值,則插入的值為自動增長后的值;如果輸入的值為0或空(NULL),則插入的值也是自動增長后的值;如果插入某個(gè)確定的值,且該值在前面沒有出現(xiàn)過,就可以直接插入。

  InnoDB還支持外鍵(FOREIGN KEY)。外鍵所在的表叫做子表,外鍵所依賴(REFERENCES)的表叫做父表。父表中被字表外鍵關(guān)聯(lián)的字段必須為主鍵。當(dāng)刪除、更新父表中的某條信息時(shí),子表也必須有相應(yīng)的改變,這是數(shù)據(jù)庫的參照完整性規(guī)則。

  InnoDB中,創(chuàng)建的表的表結(jié)構(gòu)存儲在.frm文件中(我覺得是frame的縮寫吧)。數(shù)據(jù)和索引存儲在innodb_data_home_dir和innodb_data_file_path定義的表空間中。

  InnoDB的優(yōu)勢在于提供了良好的事務(wù)處理、崩潰修復(fù)能力和并發(fā)控制。缺點(diǎn)是讀寫效率較差,占用的數(shù)據(jù)空間相對較大。

  二.MyISAM存儲引擎

  MyISAM是MySQL中常見的存儲引擎,曾經(jīng)是MySQL的默認(rèn)存儲引擎。MyISAM是基于ISAM引擎發(fā)展起來的,增加了許多有用的擴(kuò)展。

  MyISAM的表存儲成3個(gè)文件。文件的名字與表名相同。拓展名為frm、MYD、MYI。其實(shí),frm文件存儲表的結(jié)構(gòu);MYD文件存儲數(shù)據(jù),是MYData的縮寫;MYI文件存儲索引,是MYIndex的縮寫。

  基于MyISAM存儲引擎的表支持3種不同的存儲格式。包括靜態(tài)型、動態(tài)型和壓縮型。其中,靜態(tài)型是MyISAM的默認(rèn)存儲格式,它的字段是固定長度的;動態(tài)型包含變長字段,記錄的長度不是固定的;壓縮型需要用到myisampack工具,占用的磁盤空間較小。

  MyISAM的優(yōu)勢在于占用空間小,處理速度快。缺點(diǎn)是不支持事務(wù)的完整性和并發(fā)性。

  三.MEMORY存儲引擎

  MEMORY是MySQL中一類特殊的存儲引擎。它使用存儲在內(nèi)存中的內(nèi)容來創(chuàng)建表,而且數(shù)據(jù)全部放在內(nèi)存中。這些特性與前面的兩個(gè)很不同。

  每個(gè)基于MEMORY存儲引擎的表實(shí)際對應(yīng)一個(gè)磁盤文件。該文件的文件名與表名相同,類型為frm類型。該文件中只存儲表的結(jié)構(gòu)。而其數(shù)據(jù)文件,都是存儲在內(nèi)存中,這樣有利于數(shù)據(jù)的快速處理,提高整個(gè)表的效率。值得注意的是,服務(wù)器需要有足夠的內(nèi)存來維持MEMORY存儲引擎的表的使用。如果不需要了,可以釋放內(nèi)存,甚至刪除不需要的表。

  MEMORY默認(rèn)使用哈希索引。速度比使用B型樹索引快。當(dāng)然如果你想用B型樹索引,可以在創(chuàng)建索引時(shí)指定。

  注意,MEMORY用到的很少,因?yàn)樗前褦?shù)據(jù)存到內(nèi)存中,如果內(nèi)存出現(xiàn)異常就會影響數(shù)據(jù)。如果重啟或者關(guān)機(jī),所有數(shù)據(jù)都會消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。





猜你喜歡:

什么是MySQL?MySQL為什么有兩個(gè)版本?

史上最全 MySQL8.0從入門到精通實(shí)戰(zhàn)教程

MySQL表數(shù)據(jù)導(dǎo)入到Hive文件【圖文詳解】

爬蟲適合使用Mysql還是Mongdb?

傳智教育java后端開發(fā)培訓(xùn)

0 分享到:
和我們在線交談!