数据表的类型及储存位置

MySQL支持MyISAM,InnoDB,GEAP , BOB , ARCHIVE , CSV等多种数据表类型,在创建一个新的MySQL数据表时,可以为它设置一个类型。其中最重要的有MyISAM和InnoDB两种表类型,它们有各自的特性。如果创建一个数据表时没有设置类型,MySQL服务器将会根据它的具体配置情况在MyISAM和InnoDB两个类型之间选择。默认的数据表类型,由MySQL配置文件里的default-table-type选项指定,当用CREATE TABLE命令创建一个新数据表时,可以通过ENGINE或TYPE选项决定数据表类型。

MyISAM数据表

MyISAM 数据表类型的特点是成熟,稳定和易于管理。它使用一种表格锁定机制,来优化多个并发的读/写操作。其代价是你经常需要运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM强调快速的读写操作,这就是为什么MyISAM受到Web开发人员如此青睐的主要原因。

InnoDB数据表

可以把InnoDB数据表看作是MyISAM的一种更新迭代产品。InnoDB给MySQL提供了具有提交,回滚,和崩溃恢复能力的事务安全储存引擎

如何选择InnoDB 还是 MyISAM表类型

MyISAM数据表和InnoDB数据表可以同时存在与同一个数据库,也就是可以把数据库里的不同数据表设置为不同类型。这样,用户就可以根据每一个数据表的内容和具体用途分别对它们作出最佳的数据表类型。
MyISAM数据表和InnoDB数据表简单的功能对比

表类型功能MyISAM表InnoDB
事务处理不支持支持
数据行锁定不支持,只支持表锁定支持
外键约束不支持支持
表空间大小相对小相对大,最大是2倍
全文索引支持不支持
COUNT问题执行COUNT(*)速度慢

如果你希望以最节约时间和空间或者响应速度更快的方式来管理数据表,MyISAM数据表就应该是首选。如果应用程序需要用到事务、外键、或更高的安全性,以及需要允许很多用户同时修改某个数据表里的数据,则InnoDB更值得考虑。当你需要创建一个新表时,可以通过添加一个ENGINE或TYPE选项到CREATE TABLE 语句来告诉你MySQL你需要创建什么类型的表

CREATE TABLE t (i INT) ENGINE = INNODB;
CREATE TABLE t (i INT) TYPE = INNODB;

数据表的储存位置

  • 数据库目录是存储MySQL数据库服务器存放数据文件的地方,不仅包括有关的表的文件,还包括数据文件和MySQL的服务器选项文件。不同的安装包,数据库的目录默认位置是不同的,除了可以在MySQL配置文件中指定,也可以在启动服务器时通过–dayadir = /path/to/dir 明确指定。假设MySQL将数据库目录存放在服务器的C:/Appserv/mysql/data/目录下面,则MySQL管理的每个数据库都有自己的数据库目录,它们是C:/Appserv/mysql/data/目录下面的子目录,是与所表示的数据库目录相同的名称。例如,数据库bookstore在服务器中对应的目录是C:/Appserv/mysql/data/bookstore。
  • MySQL将数据以记录形式存在表中,而表则以文件的形式存放在磁盘中的目录中,这个目录就是一个数据库目录。而MySQL每种表在该目录中有不同的文件格式,但有一个共同点,就是每种表至少有一个存放表结构定义的.frm文件。一个MyISAM数据表则有三个文件,它们分别是:以.frm为后缀的结构定义文件,以.MYD为后缀的数据文件,和以.MYI为后缀的索引文件。而InnoDB由于表空间的概念管理数据表,它只用一个与数据库表对应的并以.frm为后缀名的文件,同一个目录下的其他文件表示为表空间,储存数据表的数据和索引。创建、修改和删除数据表,其实就是对数据库目录下的文件进行操作。
  • 可以直接对数据文件进行操作,以实现某些数据管理的功能,例如,数据表具有的可移植性,意思就是可直接把数据表文件复制到磁盘上,再把磁盘里的文件直接复制到另一台MySQL服务器主机的某个数据库目录里,而那台主机上的MySQL服务器就能直接使用该数据表了。
    原文作者:全栈coder
    原文地址: https://www.jianshu.com/p/8dca09a9e307
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞