Получить имена таблиц, используя инструкцию 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


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';


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. Он содержит информацию о таблицах в других ваших базах данных. Но если вы находитесь на виртуальном хостинге, у вас, вероятно, нет доступа к нему.



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'

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;**

-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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.