游戏开发工具

SQL语句对应的文件操作

这一章我们学习了如何使用 SQL 语句操作数据表,为了让大家更好的理解,本节介绍一下如何将 SQL 语句映射为文件操作。

1. 查询数据表

前面介绍过,在 MySQL 中无论哪种存储引擎的表都会有一个 .frm 文件来保存数据表的结构定义。所以,执行 SHOW TABLES; 语句相当于列出数据库目录中所有 .frm 文件的基本名,所得到的结果是相同的。

有些数据库系统使用注册表来记录某数据库里的所有数据表,但 MySQL 没有这样做,因为,MySQL 数据目录的层次结构已经把“注册表”隐藏在其中了。

2. 创建数据表

创建数据表时,需要执行 CREATE TABLE 语句定义数据表的结构。无论是哪一种存储引擎,MySQL 服务器都将创建一个 .frm 文件来保存数据表的结构定义的内部编码。

MySQL 服务器还会根据指定数据表的具体类型创建出其他必要的文件。例如,它将为一个 MyISAM 数据表创建出一个 .MYD 数据文件和一个 .MYI 索引文件;为一个 MERGE 数据表创建出一个 .mgr 数据/索引文件。

对于 InnoDB 数据表,InnoDB 处理程序将在 InnoDB 表空间里为数据表初始化一些数据和索引信息。

3. 更新数据表

当执行 ALTER TABLE 语句时,MySQL 服务器将对相对应数据表的 .frm 文件重新进行编码,来表明数据表的结构性变化,还要对有关的数据文件和索引文件的内容进行相应的修改。

CREATE INDEX 和 DROP INDEX 等语句也是对相应数据表的 .frm 文件重新进行编码,因为 MySQL 服务器在内部是把它们当作等效的 ALTER TABLE 语句来处理的。改变 InnoDB 数据表的结构会引起 InnoDB 处理程序修改 InnoDB 表空间中数据表的数据,同时也对索引做出相应的修改。

4. 删除数据表

DROP TABLE 语句是通过删除该相应数据表的各种有关文件而实现的。

对于某些数据表类型,可以通过在相应的数据库目录里删除与数据表有关的各个文件的办法来手动删除这个数据表。例如,假设 mydb 是当前数据库,mytb1 是一个 MyISAM、Archive 或 MERGE 类型的数据表,那么 DROP TABLE mytb1 语句就大致等效于下面这两条命令:

cd DATADIR(数据库文件存放路径)
rm -f mydb/mytb1.* 或 del mydb/mytb1.*

对于 InnoDB 数据表,因为它的某些组成部分在文件系统里没有实体性的文件代表,所以没有等效的文件系统命令。例如,InnoDB 数据表在文件系统里只有一个相应的 .frm 文件,用文件系统级命令删除这个文件后,该数据表在 InnoDB 表空间中对应的数据和索引将没有任何意义。