Получить имена таблиц с помощью инструкции 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? */

11 ответов


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

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


попробуй:

select * from information_schema.tables

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


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

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


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

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


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

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


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

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

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

SHOW TABLES FROM <database_name>

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

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

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

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

print($nomeTabela);
exit;