MySQL里dd:columns表结构怎么变成Table,过程和用法聊聊
- 问答
- 2026-01-17 07:00:52
- 1
要理解MySQL里dd::columns表结构怎么变成我们能看到的INFORMATION_SCHEMA.COLUMNS表,这个过程其实就像是把一个工厂内部的精密设计图纸(dd::columns)转换成了一个对外展示的、通俗易懂的产品说明书(TABLE),我们不能直接进入工厂的核心车间看图纸,但可以在展示厅里翻阅说明书,这个转换过程的核心角色,就是MySQL的数据字典(Data Dictionary)。
在MySQL 8.0之前,表结构等信息分散存储在文件(比如.frm文件)和某些系统表中,查询起来比较麻烦,而且容易不一致,从8.0开始,MySQL引入了一个全新的、统一的数据字典来集中管理所有这些元数据(也就是关于数据库、表、列等的数据),这个数据字典的核心是一组隐藏在系统内部的表,它们被称为“数据字典表”或“系统表”,dd::columns就是其中之一,这里的dd是命名空间,代表Data Dictionary,columns就是专门存储所有表中所有列信息的核心表。
为什么我们不能直接看到dd::columns?
因为它是MySQL服务器的“内脏”,是核心实现的一部分,直接让用户查询这些内部表是非常危险的,万一不小心修改或删除了里面的数据,整个数据库都可能崩溃,MySQL把这些表深深地隐藏和保护了起来,我们通过普通的SQL语句是无法直接访问dd::columns的。
它是如何变成我们熟悉的TABLE的呢?

这个过程主要依赖于一个“翻译官”或“视图层”,也就是INFORMATION_SCHEMA数据库和SHOW命令,具体步骤如下:
-
存储与抽象:当你执行
CREATE TABLE语句时,MySQL的SQL层会解析你的命令,然后将关于这张表的所有信息,比如表名、每一列的名字、数据类型、是否允许NULL值、默认值等,以一种高度优化的内部格式(对象形式)存入数据字典中。dd::columns表就是存储列信息的主要地方,这是一个底层的、为系统高效运行而设计的数据结构。 -
提供访问接口:为了让用户能够安全、方便地查询这些元数据,MySQL在
INFORMATION_SCHEMA数据库下创建了一系列的视图(View)。INFORMATION_SCHEMA.COLUMNS就是其中一个非常重要的视图,你可以把它理解成一个对外营业的“服务窗口”。 -
转换与映射:当我们执行一条查询,比如
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'my_table'时,会发生以下事情:
- MySQL的查询处理器识别到这是在查询
INFORMATION_SCHEMA。 - 它不会去直接扫描一个物理表,而是会调用一系列内部函数和存储过程。
- 这些内部函数会去访问底层的数据字典(也就是去读取
dd::columns等内部表中的数据)。 - 这些函数将内部复杂的、为机器优化的数据格式,“翻译”成我们人类和标准SQL容易理解的格式,内部可能用一个数字代码代表
INT类型,但在INFORMATION_SCHEMA.COLUMNS的DATA_TYPE列里,它会显示为字符串'INT'。 - 这些被翻译好的、格式化的数据以一张虚拟表(视图)的形式返回给我们。
- MySQL的查询处理器识别到这是在查询
用法聊聊
了解了这个过程,我们在实际中使用时就很简单了,我们完全不需要关心背后的dd::columns,只需要和INFORMATION_SCHEMA.COLUMNS或SHOW命令打交道就行了。
-
使用
INFORMATION_SCHEMA.COLUMNS: 这是最强大和灵活的方式,因为它是一个标准的SQL表(虽然是视图),你可以用所有熟悉的SQL操作来查询它,比如WHERE条件过滤、JOIN连接其他表等。-
例子1:查看一张表的所有列:

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '你的数据库名' AND TABLE_NAME = '你的表名' ORDER BY ORDINAL_POSITION;
这比
SHOW COLUMNS命令更能定制化输出。 -
例子2:查找数据库中所有类型为
VARCHAR的列:SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'varchar';
这种跨表的元数据搜索是
SHOW命令难以做到的。
-
-
使用
SHOW COLUMNS命令: 这是一种更简洁、更古老的命令式语法,用起来很方便,但功能相对简单。SHOW COLUMNS FROM 你的表名 FROM 你的数据库名;
这个命令在底层,MySQL服务器基本上也是通过查询数据字典,然后帮你把结果格式化成一种易读的表格输出。
总结一下
dd::columns表结构变成我们看到的TABLE的过程,是一个典型的软件分层设计思想的体现:底层复杂、高效但封闭的实现,通过一个安全、规范的接口层向上层应用提供服务。dd::columns是MySQL数据字典内部存储列信息的核心表,而我们日常使用的INFORMATION_SCHEMA.COLUMNS视图和SHOW COLUMNS命令,则是这个核心功能对外提供的、安全友好的访问方式,我们作为使用者,只需要学会如何使用这个“服务窗口”就可以了,无需也不必去窥探后台的“厨房”是如何运作的。
本文由黎家于2026-01-17发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/82265.html
