Отримати назви таблиць за допомогою оператора 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: SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% ключове слово%';
Джарретт Барнетт

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.
ТС

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
Лорел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.