MySQL支持MyISAM构回,InnoDB谷炸,GEAP , BOB , ARCHIVE , CSV等多種數(shù)據(jù)表類型,在創(chuàng)建一個新的MySQL數(shù)據(jù)表時畦徘,可以為它設置一個類型毕籽。其中最重要的有MyISAM和InnoDB兩種表類型,它們有各自的特性井辆。如果創(chuàng)建一個數(shù)據(jù)表時沒有設置類型关筒,MySQL服務器將會根據(jù)它的具體配置情況在MyISAM和InnoDB兩個類型之間選擇。默認的數(shù)據(jù)表類型杯缺,由MySQL配置文件里的default-table-type選項指定蒸播,當用CREATE TABLE命令創(chuàng)建一個新數(shù)據(jù)表時,可以通過ENGINE或TYPE選項決定數(shù)據(jù)表類型萍肆。
MyISAM數(shù)據(jù)表
MyISAM 數(shù)據(jù)表類型的特點是成熟袍榆,穩(wěn)定和易于管理。它使用一種表格鎖定機制匾鸥,來優(yōu)化多個并發(fā)的讀/寫操作蜡塌。其代價是你經(jīng)常需要運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間勿负。MyISAM強調(diào)快速的讀寫操作馏艾,這就是為什么MyISAM受到Web開發(fā)人員如此青睞的主要原因劳曹。
InnoDB數(shù)據(jù)表
可以把InnoDB數(shù)據(jù)表看作是MyISAM的一種更新迭代產(chǎn)品。InnoDB給MySQL提供了具有提交琅摩,回滾铁孵,和崩潰恢復能力的事務安全儲存引擎
如何選擇InnoDB 還是 MyISAM表類型
MyISAM數(shù)據(jù)表和InnoDB數(shù)據(jù)表可以同時存在與同一個數(shù)據(jù)庫,也就是可以把數(shù)據(jù)庫里的不同數(shù)據(jù)表設置為不同類型房资。這樣蜕劝,用戶就可以根據(jù)每一個數(shù)據(jù)表的內(nèi)容和具體用途分別對它們作出最佳的數(shù)據(jù)表類型。
MyISAM數(shù)據(jù)表和InnoDB數(shù)據(jù)表簡單的功能對比
表類型功能 | MyISAM表 | InnoDB |
---|---|---|
事務處理 | 不支持 | 支持 |
數(shù)據(jù)行鎖定 | 不支持轰异,只支持表鎖定 | 支持 |
外鍵約束 | 不支持 | 支持 |
表空間大小 | 相對小 | 相對大岖沛,最大是2倍 |
全文索引 | 支持 | 不支持 |
COUNT問題 | 無 | 執(zhí)行COUNT(*)速度慢 |
如果你希望以最節(jié)約時間和空間或者響應速度更快的方式來管理數(shù)據(jù)表,MyISAM數(shù)據(jù)表就應該是首選搭独。如果應用程序需要用到事務婴削、外鍵、或更高的安全性牙肝,以及需要允許很多用戶同時修改某個數(shù)據(jù)表里的數(shù)據(jù)唉俗,則InnoDB更值得考慮。當你需要創(chuàng)建一個新表時配椭,可以通過添加一個ENGINE或TYPE選項到CREATE TABLE 語句來告訴你MySQL你需要創(chuàng)建什么類型的表
CREATE TABLE t (i INT) ENGINE = INNODB;
CREATE TABLE t (i INT) TYPE = INNODB;
數(shù)據(jù)表的儲存位置
- 數(shù)據(jù)庫目錄是存儲MySQL數(shù)據(jù)庫服務器存放數(shù)據(jù)文件的地方虫溜,不僅包括有關的表的文件,還包括數(shù)據(jù)文件和MySQL的服務器選項文件股缸。不同的安裝包衡楞,數(shù)據(jù)庫的目錄默認位置是不同的,除了可以在MySQL配置文件中指定乓序,也可以在啟動服務器時通過--dayadir = /path/to/dir 明確指定寺酪。假設MySQL將數(shù)據(jù)庫目錄存放在服務器的C:/Appserv/mysql/data/目錄下面,則MySQL管理的每個數(shù)據(jù)庫都有自己的數(shù)據(jù)庫目錄替劈,它們是C:/Appserv/mysql/data/目錄下面的子目錄寄雀,是與所表示的數(shù)據(jù)庫目錄相同的名稱。例如陨献,數(shù)據(jù)庫bookstore在服務器中對應的目錄是C:/Appserv/mysql/data/bookstore盒犹。
- MySQL將數(shù)據(jù)以記錄形式存在表中,而表則以文件的形式存放在磁盤中的目錄中眨业,這個目錄就是一個數(shù)據(jù)庫目錄急膀。而MySQL每種表在該目錄中有不同的文件格式,但有一個共同點龄捡,就是每種表至少有一個存放表結(jié)構定義的.frm文件卓嫂。一個MyISAM數(shù)據(jù)表則有三個文件,它們分別是:以.frm為后綴的結(jié)構定義文件聘殖,以.MYD為后綴的數(shù)據(jù)文件晨雳,和以.MYI為后綴的索引文件行瑞。而InnoDB由于表空間的概念管理數(shù)據(jù)表,它只用一個與數(shù)據(jù)庫表對應的并以.frm為后綴名的文件餐禁,同一個目錄下的其他文件表示為表空間血久,儲存數(shù)據(jù)表的數(shù)據(jù)和索引。創(chuàng)建帮非、修改和刪除數(shù)據(jù)表氧吐,其實就是對數(shù)據(jù)庫目錄下的文件進行操作。
- 可以直接對數(shù)據(jù)文件進行操作末盔,以實現(xiàn)某些數(shù)據(jù)管理的功能筑舅,例如,數(shù)據(jù)表具有的可移植性陨舱,意思就是可直接把數(shù)據(jù)表文件復制到磁盤上豁翎,再把磁盤里的文件直接復制到另一臺MySQL服務器主機的某個數(shù)據(jù)庫目錄里,而那臺主機上的MySQL服務器就能直接使用該數(shù)據(jù)表了隅忿。