MySql:显示列但排除除字段名称之外的所有内容

46

我想从MySQL中提取表格字段名称并导入到Python中,我知道

'show columns from project'

可以使用'WHERE...'来限制查询结果,以返回指定的列。但是我找不到仅返回列名而不包括Type、Key、Null和Extra信息的示例。

如何匹配条件以获取所有列名,并排除其他描述信息?


如果您感兴趣的话,我在这个答案中编写了一个描述所有表格的程序。 - Drew
6个回答

96
SELECT column_name
FROM information_schema.columns
WHERE  table_name = 'your_table'
   AND table_schema = 'database_name'

太棒了!我在两台服务器上测试了phpMyAdmin。但是每个服务器上只有一个information_schema数据库,并且在同一台服务器上可能有多个不同数据库中具有相同表名的表。在这种情况下,它如何知道要提取哪个表列的列表呢? - ChewyChunks
1
请查看 table_schema 列。 - user330315
对我来说,即使没有 "AND table_schema ='database_name'" 也可以正常工作。 - Peter Bakker
1
如果您想按表中列的顺序列出列,请在查询中添加“ORDER BY ordinal_position”。 - Matt Humphrey

21

虽然看起来更优美,但你不需要使用awk。 MySQL的information_schema.columns表中包含了你所需的信息。

-- 在'database_name'数据库中,完整描述'table_name'表

SHOW COLUMNS
FROM database_name.table_name ;

-- 显示'database_name'数据库中'table_name'表格的列名。

SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'database_name'
AND table_name = 'table_name' ;

3
将答案传递到awk中:
SHOW columns FROM project; | awk '{ print $1 }'

2
您可以直接查询MySQL的information_schema数据库以获取字段名称:
select distinct(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME='posts';

1
如果你的目标是逗号分隔的列表(在PHP和Perl中通常需要),GROUP_CONCAT是你的好朋友:
SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='your-table-name-here' GROUP BY TABLE_NAME ORDER BY ORDINAL_POSITION

如果您需要对它们进行引用,这将为您提供除最外层引号之外的所有内容:
SELECT GROUP_CONCAT(column_name SEPARATOR '","') FROM information_schema.columns WHERE table_name='your-table-name-here' GROUP BY TABLE_NAME ORDER BY ORDINAL_POSITION

-4
SHOW COLUMNS FROM `table_name`

这个 MySQL 查询最好用,它可以显示 MySQL 表的所有字段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接