今天创建表结构的时候,发现项目中含有InnoDB和MyISAM类型的表,现总结两个引擎的差别如下。
1、MyISAM不支持事务,InnoDB支持事务处理。
2、MyISAM锁为全表锁,InnoDB支持行级锁,但是InnoDB的行级锁并不是绝对的,当SQL语句不能确定搜索的范围时(UPDATE `user_info` SET `user_desc` = '用户简介' WHERE `user_name` LIKE '%明%')同样会锁住全表。
3、InnoDB中不保存表数据的行数,MyISAM保存表数据的行数,所以SELECT COUNT(*) FROM `table_name`时MyISAM只要读出保存的行数即可,而InnoDB需要扫描一遍整个表。
4、MyISAM把数据保存成文件的形式,方便数据转移。
5、对于AUTO_INCREMENT类型的字段,InnoDB必须包含只有该字段的索引,但在MyISAM表中可以建立联合索引。