Выберите данные из запроса «Показать таблицы» MySQL - PullRequest
51 голосов
/ 15 сентября 2008

Можно ли выбрать из show tables в MySQL?

SELECT * FROM (SHOW TABLES) AS `my_tables`

Что-то в этом роде, хотя вышеописанное не работает (по крайней мере, на 5.0.51a).

Ответы [ 13 ]

40 голосов
/ 15 сентября 2008

Я думаю, что вы хотите SELECT * FROM INFORMATION_SCHEMA.TABLES

См. http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

20 голосов
/ 15 сентября 2008

Не то, о чем я знаю, если вы не выберете из INFORMATION_SCHEMA, как уже упоминали другие.

Однако команда SHOW довольно гибкая, E.g.:

SHOW tables like '%s%'
11 голосов
/ 20 февраля 2015

Для подсчета:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;

К списку:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
4 голосов
/ 16 мая 2013

Вы не можете поместить операторы SHOW в подзапрос, как в вашем примере. Единственный оператор, который может входить в подзапрос - это SELECT.

Как уже говорилось в других ответах, вы можете запросить INFORMATION_SCHEMA напрямую с помощью SELECT и таким образом получить гораздо большую гибкость.

Операторы MySQL SHOW являются внутренне просто запросами к таблицам INFORMATION_SCHEMA.

Пользователь @physicalattraction разместил этот комментарий к большинству других ответов:

Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как предполагалось в ОП. - физическая привлекательность

Напротив, вопрос ОП не говорит о том, что они хотят выбрать данные во всех таблицах. Они говорят, что хотят выбрать из результата SHOW TABLES, который является просто списком имен таблиц.

Если OP хочет выбрать все данные из всех таблиц, то ответ - нет, вы не можете сделать это одним запросом. Каждый запрос должен называть свои таблицы явно. Вы не можете сделать имя таблицы переменной или результатом другой части того же запроса. Кроме того, все строки данного результата запроса должны иметь одинаковые столбцы.

Таким образом, единственный способ выбрать все данные из всех таблиц - это запустить SHOW TABLES, а затем для каждой таблицы, указанной в этом результате, выполнить другой запрос.

4 голосов
/ 15 сентября 2008

Вы изучали запросы INFORMATION_SCHEMA.Tables Как в

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
3 голосов
/ 02 августа 2013

Вы можете быть ближе, чем вы думаете & mdash; SHOW TABLES уже ведет себя так же, как SELECT:

$pdo = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}
3 голосов
/ 05 ноября 2010
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

Это вернет комментарий к: myTable.myColumnName

3 голосов
/ 15 сентября 2008
SELECT * FROM INFORMATION_SCHEMA.TABLES

Это должно быть хорошим началом. Для получения дополнительной информации проверьте INFORMATION_SCHEMA Таблицы .

3 голосов
/ 15 сентября 2008

Я думаю, что вы хотите, чтобы MySQL представлял информацию (информацию): http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

2 голосов
/ 16 мая 2013

в MySql 5.1 вы можете попробовать

show tables like 'user%';

выход:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...