Как показать имена столбцов таблицы?


17

Случай прост: у вас есть база данных MySQL, где у вас есть только интерфейс SQL-запросов, и вы хотите знать структуру базы данных с запросами. Вы можете перечислить таблицы с помощью show tables;команды, но как вы видите имена отдельных столбцов?

( SELECTоператор показывает, Empty setчто данные отсутствуют и НЕ могут использоваться таким образом.)


Обратите внимание, что принятое решение является нижним в descкоманде. Любопытно, что это самый короткий, но имеет наименьшее количество голосов. Для меня это тоже самое лучшее.
Мико

2
Вы просили простой запрос SQL. Ваш ответ не SQL, так что это может объяснить небольшое количество голосов. Вам, вероятно, следует изменить заголовок вашего запроса на: «Как отобразить имена столбцов таблицы»
Леннарт

Хорошая идея, теперь мой ответ лучше соответствует вопросу.
Мико

Ответы:


36
select column_name from information_schema.columns where table_name='table'

2
Между тем я нашел этот запрос также полезным: show create table <table_name>где вместо <table_name> вы помещаете имя таблицы в виде обычного текста. Это дает также типы, в то время как ваш подходит для листинга очень хорошо.
Мико

Как сказал @mico: "show create table tbl_name \ G" может быть вашим решением. См. Dev.mysql.com/doc/refman/5.7/en/show-create-table.html Часть "\ G" предназначена только для форматирования вывода. С уважением.
tdaget

6

Лучшее решение, которое я обнаружил, было desc table_nameкомандой. Более подробная информация находится в списке MySQL Tables . Эта команда дает описание одной таблицы базы данных, что я и пытался выяснить.


6

Чтобы убедиться, что вы перечисляете столбцы в таблице в текущей базе данных, используйте функцию DATABASE () или SCHEMA () . Возвращает NULL, если вы не в текущей базе данных. Этот запрос покажет столбцы в таблице в порядке их определения:

SELECT column_name,column_type
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name='table'
ORDER BY ordinal_position;

3

Я не уверен, что понимаю, что вы имеете в виду под названиями таблиц , но вы можете получить большую часть информации о таблицах и их столбцах из INFORMATION_SCHEMA


3

как вы видите отдельные названия таблиц?

Вы имеете в виду комментарии к таблице ?

use stack;
create table t(v integer primary key) comment 'My Special Table';

show tables;
+-----------------+
| Tables_in_stack |
+-----------------+
| t               |
+-----------------+

select table_name, table_comment from information_schema.tables where table_name='t';
+------------+------------------+
| table_name | table_comment    |
+------------+------------------+
| t          | My Special Table |
+------------+------------------+

Я хотел эти названия столбцов, и у меня уже есть несколько способов, благодаря быстрым ответам. Спасибо и за этот комментарий, Джек.
Мико

1
Не возражаете ли вы немного переформулировать свой вопрос, чтобы прояснить, какие столбцы вам нужны?
Джек Дуглас

2
SHOW COLUMNS FROM mydb.mytable;

где mydb - база данных, которая содержит необходимую таблицу

mytable - необходимая таблица

Возвращает информацию о столбцах (например, имена столбцов, тип и т. Д.)


1
Небольшие фрагменты кода без объяснения того, как они решают проблему ОП, не приветствуются. Пожалуйста, попробуйте добавить больше деталей к вашему ответу.
Эрик

0

Вы должны присоединиться information_schema.tablesи information_schema.columnsвместе , чтобы получить список таблиц и деталей их колонн.

information_schema.columnsне только показывает детали о таблицах, но и представления. Нет способа отфильтровать только детали таблицы из этого системного представления.

Следовательно, вам нужно присоединиться.

Пример запроса:

select t.TABLE_SCHEMA, t.TABLE_NAME, c.COLUMN_NAME, c.COLUMN_TYPE, c.DATA_TYPE
from information_schema.tables t , information_schema.columns c where 2=2 
and t.table_schema=c.table_schema
and t.table_name=c.table_name
and t.table_type ='BASE TABLE' 
order by t.table_schema, t.table_name, c.column_name 
;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.