13.1.18.1 CREATE TABLE 创建的文件

MySQL 通过数据库目录中的.frmtable 格式(定义)文件 table 示每个 table。该 table 的存储引擎可能还会创建其他文件。

对于在每个 table 文件 table 空间或常规 table 空间中创建的InnoDBtable,table 数据和关联的索引存储在数据库目录的.ibd file中。在系统 table 空间中创建InnoDBtable 时,table 数据和索引存储在 table 示系统 table 空间的ibdata* files中。 innodb_file_per_table选项控制默认情况下是在每 table 文件 table 空间中还是在系统 table 空间中创建 table。 TABLESPACE选项可用于将 table 放置在每 table 文件 table 空间,常规 table 空间或系统 table 空间中,而与innodb_file_per_table设置无关。

对于MyISAMtable,存储引擎创建数据和索引文件。因此,对于每个MyISAMtable* tbl_name *,存在三个磁盘文件。

File Purpose
tbl_name.frm table 格式(定义)文件
tbl_name.MYD Data file
tbl_name.MYI Index file

第 15 章,备用存储引擎,描述每个存储引擎创建的代 tabletable 的文件。如果 table 名包含特殊字符,则 table 文件的名称将包含这些字符的编码版本,如第 9.2.4 节“将标识符 Map 到文件名”中所述。

.frm 文件结构施加的限制

如前所述,每个 table 都有一个.frm文件,其中包含 table 定义。服务器使用以下 table 达式来检查文件中存储的某些 table 信息是否超过 64KB 的上限:

if (info_length+(ulong) create_fields.elements*FCOMP+288+
    n_length+int_length+com_length > 65535L || int_count > 255)

对照 table 达式检查的.frm文件中存储的信息部分不能超过 64KB 限制,因此,如果 table 定义达到此大小,则无法添加更多列。

table 达式中的相关因素是:

刚刚描述的 table 达式对允许的 table 定义有一些含义:

e1 ENUM('a','b','c')
e2 ENUM('a','b','c')
首页