MyISAM

不支持事务,适用于选择密集型,插入密集型, mysql 默认的引擎
该引擎基于ISAM,除了提供ISAM所没有的索引和字段管理等大量功能
MyISAM还使用一种表锁机制来优化多个并发读写操作,但需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制

所浪费的空间,否则碎片也会随之增加,最终影响数据访问性能。
还有一些有用的扩展,例如用来修复数据库文件的MyISAM Chk工具和用来恢复浪费空间的 MyISAM Pack工具
MyISAM强调了快速读取操作,主要用于高负载的select,这可能也是MySQL深受Web开发的主要原因:在Web开发中

进行的大量数据操作都是读,所以大多数虚拟主机提供商和Internet平台提供商(Internet Presence Provider

,IPP)只允许使用MyISAM格式。

MyISAM类型的表支持三种不同的存储结构:静态型、动态型、压缩型。

静态表(默认的存储格式) 表中的字段都是非变长字段,这样每个记录都是固定长度的,这样存储

优点:非常迅速,易缓存,出现故障容易恢复

缺点:占用的空间通常比动态表多。静态表在数据存储时会根据列定义的宽度定义补足空格,但是在访问的时候并

不会得到这些空格,这些空格在返回给应用之前已经去掉。同时需要注意:在某些情况下可能需要返回字段后的

空格,而使用这种格式时后面到空格会被自动处理掉。

动态表 包含变长字段,记录非固定长度的

优点:占用空间较少

缺点:频繁更新删除记录会产生碎片,需要定期执行OPTIMIZE TABLE或myisamchk -r改善性能,并且出现故障的时

候恢复相对比较困难

压缩表 由myisamchk工具创建,占据非常小空间,因为每条记录都是被单独压缩,所以只有非常小的访问开支

InnoDB

适用于更新密集型,支持事务,自动灾难恢复,行锁,外键
该存储引擎为MySQL表提供了ACID事务支持、系统崩溃修复能力和多版本并发控制(即MVCC Multi-Version

Concurrency Control)的行锁
支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空则自动从现有值开始增值,如

果有但是比现在的还大,则直接保存这个值
支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。
该引擎在5.5后的MySQL数据库中为默认存储引擎。