Получить имена таблиц, используя инструкцию SELECT в MySQL - PullRequest
222 голосов
/ 01 декабря 2011

В MySQL я знаю, что могу перечислить таблицы в базе данных с помощью:

SHOW TABLES

Однако я хочу вставить эти имена таблиц в другую таблицу, например:

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

Есть ли способ получить имена таблиц с помощью стандартного оператора SELECT, например:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */

Ответы [ 11 ]

299 голосов
/ 18 ноября 2014

Чтобы получить имя всех таблиц, используйте:

SELECT table_name FROM information_schema.tables;

Чтобы получить имя таблиц из конкретной базы данных, используйте:

SELECT table_name FROM information_schema.tables where table_schema='your_database_name';

Теперь, чтобы ответить на оригинальный вопрос, используйте этот запрос:

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';

Подробнее см .: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

141 голосов
/ 01 декабря 2011

Попробуйте:

select * from information_schema.tables

См .: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

17 голосов
/ 02 мая 2015

если у нас есть несколько баз данных, и нам нужно выбрать все таблицы для конкретной базы данных, мы можем использовать TABLE_SCHEMA, чтобы определить имя базы данных как:

select table_name from information_schema.tables where TABLE_SCHEMA='dbname';

12 голосов
/ 01 декабря 2011

Помимо использования таблицы INFORMATION_SCHEMA, чтобы использовать SHOW TABLES для вставки в таблицу, вы должны использовать следующее

<?php
 $sql = "SHOW TABLES FROM $dbname";
 $result = mysql_query($sql);
 $arrayCount = 0
 while ($row = mysql_fetch_row($result)) {
  $tableNames[$arrayCount] = $row[0];
  $arrayCount++; //only do this to make sure it starts at index 0
 }
 foreach ($tableNames as &$name {
  $query = "INSERT INTO metadata (table_name) VALUES ('".$name."')";
  mysql_query($query);
 }
?>
8 голосов
/ 01 декабря 2011

Взгляните на таблицу TABLES в базе данных information_schema. Он содержит информацию о таблицах в других ваших базах данных. Но если вы находитесь на виртуальном хостинге, у вас, вероятно, нет доступа к нему.

6 голосов
/ 01 декабря 2011

Я думаю, вы можете получить нужные данные из таблиц INFORMATION_SCHEMA.

Вы можете найти больше информации здесь: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3 голосов
/ 24 февраля 2017

MySQL INFORMATION_SCHEMA.TABLES таблица содержит данные как о таблицах (не временных, так и постоянных) и представлениях. Столбец TABLE_TYPE определяет, является ли это запись для таблицы или представления (для таблиц TABLE_TYPE='BASE TABLE' и для представлений TABLE_TYPE='VIEW'). Поэтому, если вы хотите видеть только из своих таблиц схемы (базы данных), есть следующий запрос:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'
3 голосов
/ 07 января 2017
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
0 голосов
/ 14 ноября 2017

Я думаю, что было бы полезно указать, что если вы хотите выбрать таблицы, содержащие определенные слова, вы можете легко сделать это, используя SELECT (вместо SHOW).Приведенный ниже запрос легко сужает поиск до таблиц, содержащих «ключевое слово»

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
0 голосов
/ 10 апреля 2017

Существует еще один более простой способ получения имен таблиц

SHOW TABLES FROM <database_name>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...