innoDB
3.23就有了innoDB引擎,5.5成为了默认引擎,支持外键
是一种事务型引擎,可以保证完整提交和回滚
更新、删除比较多的场景,推荐使用innoDB
不过innoDB对内存要求高,因为索引和数据存到一个表了;写操作的效率差
MyISAM
是非事务型引擎,对增加和查找支持的比较好访问速度快
对COUNT(*)这种对数据统计任务有专门的变量存储,O(1)级别的
不支持事务、行级锁、外键,尤其是崩溃后无法恢复
区别
磁盘文件
索引支持
innoDB支持聚簇(通常是主键)索引,MyISAM不支持(因为聚簇索引要求索引键和行数据必须在物理空间上连续)
事务机制
innoDB有undo-log和redo-log。
undo-log是磁盘中记载变更前的旧数据,rollback的话会根据undo-log覆盖缓冲区(undo_log_buffer,在内存中)中变更后的数据。以此保证事务的原子性。
redo-log是磁盘中记录数据用的,数据库宕机后,可以根据日志恢复数据。只要事务commit,能够保证该事务数据不会丢失。保证了事务的持久性。
MyISAM这几个都不行
锁粒度
MyISAM只能表锁,而innoDB表锁、行锁都可以