區別mysql
一、InnoDB支持事務,MyISAM不支持,這一點是很是之重要。事務是一種高級的處理方式,如在一些列增刪改中只要哪一個出錯還能夠回滾還原,而MyISAM就不能夠了。sql
二、MyISAM適合查詢以及插入爲主的應用,InnoDB適合頻繁修改以及設計到安全性就高的應用數據庫
3、InnoDB支持外鍵,MyISAM不支持安全
四、MyISAM是默認引擎,InnoDB須要指定spa
五、InnoDB不支持FULLTEXT類型的索引設計
六、InnoDB中不保存表的行數,如select count(*) from table時,InnoDB須要掃描一遍整個表來計算有多少行,可是MyISAM只要簡單的讀出保存好的行數便可。注意的是,當count(*)語句包含where條件時MyISAM也須要掃描整個表rest
七、對於自增加的字段,InnoDB中必須包含只有該字段的索引,可是在MyISAM表中能夠和其餘字段一塊兒創建聯合索引索引
八、清空整個表時,InnoDB是一行一行的刪除,效率很是慢。MyISAM則會重建表事務
九、InnoDB支持行鎖(某些狀況下仍是鎖整表)
ssl
使用問題
使用InnoDB的時候,咱們寫sql語句要加commit纔會執行。而且若是你使用Navicat作客戶端的話,右鍵清空表是清空不了的。若是你使用Navicat右鍵清空表後,再插入數據會鎖表。
問題描述:在mysql的gameshop數據庫上操做刪除語句,數據庫一直在執行,響應完後,報Lock wait timeout exceeded;try restarting transaction; 執行delete語句刪除失敗。
緣由:有會話執行過DML操做,而後沒commit提交,再執行刪除操做,就鎖了。
解決方法:在Navicat的查詢裏執行show processlist; 而後kill掉Time較長的process或者狀態是lock的,它們頗有可能鎖住表。show processlist我將在下一篇介紹。