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

В 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? */

Ответ 1

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 7

Таблица 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'

Ответ 8

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'

Ответ 9

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

SHOW TABLES FROM <database_name>

Ответ 10

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

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"

Ответ 11

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

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