MySQL有多種存儲引擎,MyISAM和InnoDB是其中經常使用的兩種。這裏介紹關於這兩種引擎的一些基本概念(非深刻介紹)。mysql
MyISAM基於傳統的ISAM類型,支持全文搜索,但不是事務安全的,並且不支持外鍵。每張MyISAM表存放在三個文件中:frm 文件存放表格定義;數據文件是MYD (MYData);索引文件是MYI (MYIndex)。sql
InnoDB(默認)是事務型引擎,支持回滾、崩潰恢復能力、多版本併發控制、ACID事務,支持行級鎖定(InnoDB表的行鎖不是絕對的,若是在執行一 個SQL語句時MySQL不能肯定要掃描的範圍,InnoDB表一樣會鎖全表,如like操做時的SQL語句),以及提供與Oracle類型一致的不加鎖 讀取方式。InnoDB存儲它的表和索引在一個表空間中,表空間能夠包含數個文件。數據庫
主要區別:安全
MyISAM是非事務安全型的,而InnoDB是事務安全型的。併發
MyISAM鎖的粒度是表級,而InnoDB支持行級鎖定。性能
MyISAM支持全文類型索引,而InnoDB不支持全文索引。spa
MyISAM相對簡單,因此在效率上要優於InnoDB,小型應用能夠考慮使用MyISAM。命令行
MyISAM表是保存成文件的形式,在跨平臺的數據轉移中使用MyISAM存儲會省去很多的麻煩。索引
InnoDB表比MyISAM表更安全,能夠在保證數據不會丟失的狀況下,切換非事務表到事務表(alter table tablename type=innodb)。事務
應用場景:
MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。若是應用中須要執行大量的SELECT查詢,那麼MyISAM是更好的選擇。
InnoDB用於事務處理應用程序,具備衆多特性,包括ACID事務支持。若是應用中須要執行大量的INSERT或UPDATE操做,則應該使用InnoDB,這樣能夠提升多用戶併發操做的性能。
經常使用命令:
(1)查看錶的存儲類型(三種):
show create table tablename
show table status from dbname where name=tablename
mysqlshow -u user -p password --status dbname tablename
(2)修改表的存儲引擎:
alter table tablename type=InnoDB
(3)啓動mysql數據庫的命令行中添加如下參數使新發布的表都默認使用事務:
--default-table-type=InnoDB
(4)臨時改變默認表類型:
set table_type=InnoDB
show variables like 'table_type'