Получить имена таблиц, используя инструкцию SELECT в MySQL

260

В 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? */
Майк Чемберлен
источник
возможный дубликат stackoverflow.com/questions/64894/…
hafichuk

Ответы:

381

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

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

Мурило Гарсия
источник
144

Пытаться:

select * from information_schema.tables

Смотрите: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Nthalk
источник
4
Это указывает в правильном направлении, но на самом деле не отвечает на вопрос. Могли бы уточнить подробнее.
Мурило Гарсия
@MuriloGarcia information_schema является частью стандарта SQL. У Postgres это тоже есть. Для SQLite, вы смотрите вsqlite_master
peterchaula
Извлечение таблиц по имени с помощью LIKE: ВЫБЕРИТЕ TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% keyword%';
Джаррет Барнетт
19

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

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

Abs
источник
12

Помимо использования таблицы 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

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

GolezTrol
источник
5
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Стивен Сорока
источник
3
Могу ли я попросить вас добавить больше контекста вокруг вашего ответа. Ответы только на код трудно понять. Это поможет вам и будущим читателям, если вы сможете добавить больше информации в свой пост.
RBT
4

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

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'
sbrbot
источник
2

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

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
Роберт Синклер
источник
0

Есть еще один более простой способ получить имена таблиц

SHOW TABLES FROM <database_name>
кузнец
источник
2
Это не отвечает на вопрос вообще.
Майк Чемберлен
Помог мне, когда я ищу что-то, что попало в заголовок вопроса.
Шихе Чжан
Нет. Это не хорошо, так как показывает только таблицы в инструментах mysql.
TS
0

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

**select table_schema Schema_Name ,table_name TableName,column_name ColumnName,ordinal_position "Position",column_type DataType,COUNT(1) ColumnCount
FROM information_schema.columns
GROUP by table_schema,table_name,column_name,ordinal_position, column_type;**
Sidhajyoti
источник
-3

Чтобы вставить, обновить и удалить, сделайте следующее:

$teste = array('LOW_PRIORITY', 'DELAYED', 'HIGH_PRIORITY', 'IGNORE', 'INTO', 'INSERT', 'UPDATE', 'DELETE', 'QUICK', 'FROM');
$teste1 = array("\t", "\n", "\r", "\0", "\x0B");
$strsql = trim(str_ireplace($teste1, ' ', str_ireplace($teste, '', $strsql)));
$nomeTabela = substr($strsql, 0, strpos($strsql, ' '));

print($nomeTabela);
exit;
Эдуардо Крп
источник
Мы ожидаем, что английский здесь. Однако у нас есть сайт на португальском языке: pt.stackoverflow.com
Laurel