本小节主要介绍SQL语句下映射的文件操作:
1. 数据表查询机制
在 MySQL 5.7 及更早版本中,所有存储引擎的数据表均会生成一个 .frm 文件,用于存储表结构元数据。因此,执行 SHOW TABLES 语句的本质是扫描数据库目录下的 .frm 文件并提取其基名,其结果与直接列出该目录下所有 .frm 文件名并去除后缀的操作完全一致。(注:MySQL 8.0 及以上版本已不再使用 .frm 文件,表结构信息统一存储于事务性数据字典中。)
2. 数据表创建过程
通过 CREATE TABLE 语句创建数据表时,MySQL 首先会生成一个 .frm 文件,用于编码存储表的结构定义。此外,根据指定的存储引擎类型,系统还会创建相应的数据与索引文件:
对于 MyISAM 引擎,会同步生成 .MYD 数据文件和 .MYI 索引文件;
对于 MERGE 引擎,则创建 .mrg 文件以组织底层表结构;
对于 InnoDB 引擎,其数据和索引信息将在 InnoDB 表空间内进行初始化,而非创建外部文件。
3. 数据表结构更新
执行 ALTER TABLE 语句时,MySQL 会重新编码对应表的 .frm 文件以反映结构变更,并同步调整相关的数据文件和索引内容。类似地,CREATE INDEX 和 DROP INDEX 在内部也被映射为等价的 ALTER TABLE 操作,因此同样会触发 .frm 文件的重新编码。对于 InnoDB 表,结构变更还会导致表空间中的数据及索引被相应修改。
4. 数据表删除操作
DROP TABLE 语句通过移除与表相关的所有文件来实现删除操作。例如,对于 MyISAM、Archive 或 MERGE 表,在数据库目录中手动删除对应的 .frm、.MYD、.MYI 或 .mrg 文件即可达到与 DROP TABLE 类似的效果。
然而,对于 InnoDB 表,由于其数据和索引主要存储在表空间内,文件系统中仅存在 .frm 文件(8.0 前版本)。若仅删除该文件,表空间中对应的数据和索引将变为孤立数据,无法被有效管理,因此不建议直接通过文件操作删除 InnoDB 表。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程