MySQL 8.0 参考手册 / 第 13 章 SQL 语句 / 13.1 数据定义语句 / 13.1.20 CREATE TABLE 语句 /
13.1.17.1 CREATE TABLE 创建的文件
MySQL 通过.frm
数据库目录中的表格式(定义)文件表示每个表。表的存储引擎也可能创建其他文件。
对于InnoDB
表,文件存储由
innodb_file_per_table
配置选项控制。InnoDB
对于打开此选项时创建
的每个表,表数据和所有关联的索引都存储在位于数据库目录内的.ibd 文件中。关闭此选项时,所有
InnoDB
表和索引都存储在
系统表空间中,由一个或多个
ibdata* 文件表示。
对于MyISAM
表,存储引擎创建数据和索引文件。因此,对于每个MyISAM
表tbl_name
,有三个磁盘文件。
文件 | 目的 |
---|---|
|
表格格式(定义)文件 |
|
数据文件 |
|
索引文件 |
第 15 章,替代存储引擎,描述了每个存储引擎创建哪些文件来表示表。如果表名包含特殊字符,则表文件的名称包含这些字符的编码版本,如 第 9.2.4 节,“标识符到文件名的映射”中所述。
如前所述,每个表都有一个
.frm
包含表定义的文件。服务器使用以下表达式检查文件中存储的一些表信息是否超过 64KB 的上限:
if (info_length+(ulong) create_fields.elements*FCOMP+288+
n_length+int_length+com_length > 65535L || int_count > 255)
文件中存储的
.frm
根据表达式检查的信息部分不能超过 64KB 限制,因此如果表定义达到此大小,则无法添加更多列。
表达式中的相关因素是:
刚刚描述的表达式对允许的表定义有几个含义: