1、MyISAM:默認表類型,它是基於傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標準方法。不是事務安全的,而且不支持外鍵,如果執行大量的select,insert MyISAM比較適合。
2、InnoDB:支持事務安全的引擎,支持外鍵、行鎖、事務是他的最大特點。如果有大量的update和insert,建議使用InnoDB,特別是針對多個併發和QPS較高的情況。
- innodb 支持事務, myisam 不支持事務
- innodb 支持外鍵, myisam 不支持外鍵
- innodb 支持行級鎖, myisam 支持表級鎖
- myisam 保存了表的總行數count(*), innodb沒有保存,需要掃描全表查詢
mysql鎖機制
1.innodb存儲引擎:
行級鎖(也兼容了表級鎖)
行級鎖又分爲共享鎖和排他鎖 (另外還有意向共享鎖和意向排他鎖,存儲引擎會自動加)
執行update、insert、delete語句,引擎會自動加排它鎖
執行select,引擎是不加任何鎖的
行級鎖是基於索引字段的,如果sql語句中沒有涉及索引則會使用表級鎖。
行級鎖內存開銷大,鎖定數據量小,適合高併發場景
2.myisam存儲引擎;
表級鎖。
表示鎖又分爲讀鎖和寫鎖
讀鎖是共享的即其他事務可以同時讀,但不能寫。
加寫鎖時,其他事務不能讀也不能寫
表級鎖內存開銷小,鎖定數據量大,適合存在大量select場景