МЕТОД 1: Временная таблица
Ответы, уже размещенные об использовании временной таблицы, обычно являются наиболее подходящим решением. Но есть важный момент: если запрос выполняется как есть, все объединения и т. Д. Будут обработаны, что в некоторых случаях может занять много времени. К счастью, MySQL позволяет LIMIT 0
не возвращать никаких строк, а в документации говорится, что это «быстро возвращает пустой набор». Следующая хранимая процедура выполнит эту работу за вас, взяв в качестве входных данных строку запроса SQL, заключив ее в LIMIT 0
, запустив динамический запрос для создания временной таблицы и затем отобразив ее столбцы:
CREATE PROCEDURE showColumns(IN sqlToShow TEXT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tempTable;
SET @sqlLimit0 = CONCAT('CREATE TEMPORARY TABLE tempTable AS (SELECT * FROM (',
sqlToShow, ') subq LIMIT 0)');
PREPARE stmt FROM @sqlLimit0;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SHOW COLUMNS FROM tempTable;
END;
Одним из важных моментов является то, что переданный запрос не должен иметь точку с запятой в конце. (При необходимости хранимую процедуру можно изменить, чтобы удалить завершающие точки с запятой, но я хотел, чтобы она была простой.)
Вот живая демонстрация, показывающая его в действии: http://rextester.com/NVWY58430
МЕТОД 2: INFORMATION_SCHEMA.COLUMNS
Эту же информацию, возвращаемую SHOW COLUMNS
, можно также получить непосредственно из таблицы INFORMATION_SCHEMA.COLUMNS
:
SELECT TABLE_NAME AS `Table`,
COLUMN_NAME AS `Field`,
COLUMN_TYPE AS `Type`,
IS_NULLABLE AS `Null`,
COLUMN_KEY AS `Key`,
COLUMN_DEFAULT AS `Default`,
EXTRA AS `Extra`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = SCHEMA() -- This uses the current schema
AND `TABLE_NAME` IN ('table1', 'table2', 'etc.');
-- ...or could go even further and restrict to particular columns in tables if desired
Вышесказанное страдает недостатками, заключающимися в том, что имена таблиц (и, необязательно, столбцов) вводятся вручную и не отображают псевдонимы в SELECT
, но они выполняют основную работу. Его преимущества заключаются в том, что пользователю не требуется разрешение на создание временной таблицы, а возвращаемая информация может быть расширена для предоставления дополнительной информации о столбце, такой как максимальная длина символа, числовая точность / масштаб, комментарии к столбцу и т. Д.