在关系型数据库中,表结构信息通常保存在系统视图里,其中SQL标准定义的INFORMATION_SCHEMA.COLUMNS是最常用的一种。通过查询这个视图,我们可以不依赖特定数据库的命令,就能拿到某张表的所有列名以及相关属性。
什么是INFORMATION_SCHEMA.COLUMNS
INFORMATION_SCHEMA是一个信息数据库,其中的COLUMNS视图描述了当前数据库中所有表的列。常见字段包括TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME、DATA_TYPE、IS_NULLABLE等。我们一般只需要从中筛选出目标表即可。
基本查询写法
最简单的方式是限定库名和表名,只取COLUMN_NAME:
-- 查询指定库指定表的全部列名 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'user_info' ORDER BY ORDINAL_POSITION;
其中ORDINAL_POSITION表示列在表中的原始顺序,排序后列名顺序和建表顺序一致。
不同数据库的注意事项
虽然视图名一致,但部分数据库对大小写或库名处理方式不同:
- MySQL:TABLE_SCHEMA对应数据库名,区分大小写取决于系统配置。
- SQL Server:可使用同名视图,但库名写在TABLE_CATALOG里,TABLE_SCHEMA通常是dbo。
- PostgreSQL:同样支持,且schema概念更明显,需正确填写TABLE_SCHEMA。
获取更多列属性
如果不仅想看列名,还要知道类型和是否可为空,可以扩展SELECT列表:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'user_info';
在代码中调用示例
以Python为例,使用pymysql执行上述查询并输出:
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', password='pass', database='test_db') cur = conn.cursor() sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='test_db' AND TABLE_NAME='user_info'" cur.execute(sql) cols = [row[0] for row in cur.fetchall()] print(cols) cur.close() conn.close()
小结
通过INFORMATION_SCHEMA.COLUMNS查询表列名是一种标准且高效的做法。掌握TABLE_SCHEMA和TABLE_NAME的过滤条件,就能在多数关系型数据库中快速拿到结果,便于做结构比对、代码生成和接口文档导出。
SQLINFORMATION_SCHEMA.COLUMNS表列名查询修改时间:2026-07-27 13:30:30