Mysql 數據庫中,最常用的兩種引擎是 innordb 和 myisam。InnoDB 是 Mysql 的默
認存儲引擎。
事務處理上方面
MyISAM 強調的是性能,查詢的速度比 InnoDB 類型更快,但是不提供事務支持。
InnoDB 提供事務支持事務。外鍵
MyISAM 不支持外鍵,InnoDB 支持外鍵。鎖
MyISAM 只支持表級鎖,InnoDB 支持行級鎖和表級鎖,默認是行級鎖,行鎖大幅度提高了多用戶并發操作的性能。innodb 比較適合于插入和更新操作比較多的情況,而 myisam 則適合用于頻繁查詢的情況。另外,InnoDB 表的行鎖也不是絕對的,如果在執行一個 SQL 語句時,MySQL 不能確定要掃描的范圍,InnoDB 表同樣會鎖全表,例如 update table set num=1 where name like “%aaa%”。全文索引
MyISAM 支持全文索引, InnoDB 不支持全文索引。innodb 從 mysql5.6 版本開始提供對全文索引的支持。表主鍵
MyISAM:允許沒有主鍵的表存在。
InnoDB:如果沒有設定主鍵,就會自動生成一個 6 字節的主鍵(用戶不可見)。表的具體行數
MyISAM:select count() from table,MyISAM 只要簡單的讀出保存好的行數。因為
MyISAM 內置了一個計數器,count()時它直接從計數器中讀。
InnoDB:不保存表的具體行數,也就是說,執行 select count(*) from table 時,InnoDB要掃描一遍整個表來計算有多少行。
一張表,里面有 ID 自增主鍵,當 insert 了 17 條記錄之后,刪除了第 15,16,17 條記錄,再把 Mysql 重啟,再 insert 一條記錄,這條記錄的 ID 是 18 還是 15 ?
如果表的類型是 MyISAM, 那么是 18。因為 MyISAM 表會把自增主鍵的最大 ID 記錄到數據文件里, 重啟MySQL 自增主鍵的最大 ID 也不會丟失。
如果表的類型是 InnoDB, 那么是 15。InnoDB 表只是把自增主鍵的最大 ID 記錄到內存中, 所以重啟數據庫會導致最大 ID 丟失