mysql引擎MyISAM和InnoDB的區別

區別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我將在下一篇介紹。

相關文章
相關標籤/搜索