MySQL支持许多不同的存储引擎,有时候也称作表格类型。这就意味着对这些表的内部实现可以有选择。数据库每个表可以使用不同的存储引擎,而且可以轻松地对它们进行转换。
当使用如下所示的语句创建一个表时,可以选择一个表格类型:
CREATE TABLE table TYPE=type....
常见的可用表格类型包括:
■MyISAM——这是默认类型,也是我们已经在本书中使用的类型。它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method(有索引的顺序访问方法)的缩写,它是存储记录和文件的标准方法。与其他存储引擎相比较,MyISAM具有检查和修复表格的大多数工具。MyISAM表格可以被压缩,而且它们支持全文搜索。它们不是事务安全的,而且也不支持外键。
■MEMORY(也就是以前的HEAP)——该类型的表存储在内存中,表的索引是哈希分布的。
这使得MEMORY表格运行得非常快,但是如果发生崩溃,数据将丢失。这些特性使MEMORY表非常适合保存临时数据或者派生的数据。应该在CREATE TABLE语句中指定MAX_ROWS,否则这些表可能会吞噬所有内存。同样,它们也不能具有BLOB、TEXT或AUTO INCREMENT列。
■MERGE——这些表允许你为了查询的目的,把MyISAM表的集合作为一个单个表。因此,你可在某些操作系统中避开最大文件大小限制。
■ARCHIVE——这些表保存了大量数据,但是只有少量的脚注(footprint)。这种类型的表只支持INSERT和SELECT查询,不支持DELETE、UPDATE和REPLACE。此外,也不使用索引。
■CSV——这些表保存在服务器的单个文件中,它包含了用逗号间隔的数据。这种标类型的优点在于在需要查看的时候,否则,完全可以使用一种外部的表格应用程序来存储数据,例如Microsoft的Excel。
■InnoDB——这种类型的表是事务安全的;也就是说,它们提供了COMMIT和ROLLBACK功能。InnoDB表还支持外键。虽然比MyISAM表要慢,但是如果应用程序需要一个事务安全的存储引擎,我们建议使用它。
在大多数Web应用程序中,通常都会使用MyISAM或InnoDB表格或者二者的结合。
当对一个表格使用大量的SELECT或INSERT语句(或者二者的结合)时,应该使用MyISAM表格,因为在执行这两种命令时,MyISAM是最快的。对于许多Web应用程序(例如分类)来说,MyISAM是最佳选择。如果需要全文搜索功能,也应该使用MyISAM。当事务非常重要(例如存储财务数据的表格),或在INSERT和SELECT语句是交错执行的情况下(例如在线的消息栏或论坛系统),应该使用InnoDB。
对于临时表格或要是实现视图,可以使用MEMORY表格。如果需要处理大量的MyISAM表格,可以使用MERGE表格。
使用ALTER TABLE语句,可以在创建表格后修改表格的类型,如下所示:
alter table orders type=innodb;
alter table order_items type=innodb;
在贯穿本书的内容中,我们几乎都使用了MyISAM表格。下面,我们将花些时间集中介绍事务的使用,以及用InnoDB表格实现它们的方法。