Uzyskaj nazwy tabel za pomocą instrukcji SELECT w MySQL

260

W MySQL wiem, że mogę wyświetlić tabele w bazie danych za pomocą:

SHOW TABLES

Chcę jednak wstawić te nazwy tabel do innej tabeli, na przykład:

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

Czy istnieje sposób na uzyskanie nazw tabel za pomocą standardowej instrukcji SELECT, na przykład:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Mike Chamberlain
źródło
możliwy duplikat stackoverflow.com/questions/64894/…
hafichuk 30.11.11

Odpowiedzi:

381

Aby uzyskać nazwę wszystkich tabel, użyj:

SELECT table_name FROM information_schema.tables;

Aby uzyskać nazwę tabel z konkretnej bazy danych, użyj:

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';

Teraz, aby odpowiedzieć na oryginalne pytanie, użyj tego zapytania:

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';

Aby uzyskać więcej informacji, zobacz: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Murilo Garcia
źródło
144

Próbować:

select * from information_schema.tables

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

Nthalk
źródło
4
To wskazuje właściwy kierunek, ale tak naprawdę nie odpowiada na pytanie. Może rozwinąć więcej.
Murilo Garcia,
@MuriloGarcia information_schema jest częścią standardu SQL. Postgres też to ma. Jeśli chodzi o SQLite, zajrzyj dosqlite_master
peterchaula
Pobieranie tabel według nazwy za pomocą LIKE: WYBIERZ TABELĘ_NAME Z informacji_schema.tables GDZIE TABELA LIKE „% słowo kluczowe%”;
Jarrett Barnett,
19

jeśli mamy wiele baz danych i musimy wybrać wszystkie tabele dla konkretnej bazy danych, możemy użyć jej TABLE_SCHEMAdo zdefiniowania nazwy bazy danych jako:

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

Abs
źródło
12

Oprócz użycia tabeli INFORMACJE_SCHEMA, aby użyć SHOW TABLES do wstawienia do tabeli, skorzystaj z następujących

<?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);
 }
?>
James Williams
źródło
8

Spójrz na tabelę TABLESw bazie danych information_schema. Zawiera informacje o tabelach w innych bazach danych. Ale jeśli korzystasz z hostingu współdzielonego, prawdopodobnie nie masz do niego dostępu.

GolezTrol
źródło
5
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Steven Soroka
źródło
3
Czy mogę prosić o dodanie dodatkowego kontekstu wokół odpowiedzi? Odpowiedzi zawierające tylko kod są trudne do zrozumienia. Pomoże zarówno pytającemu, jak i przyszłym czytelnikom, czy możesz dodać więcej informacji w swoim poście.
RBT
4

INFORMATION_SCHEMA.TABLESTabela MySQL zawiera dane o obu tabelach (nie tymczasowych, ale stałych) i widokach. Kolumna TABLE_TYPEokreśla, czy jest to rekord dla tabeli czy widoku (dla tabel TABLE_TYPE='BASE TABLE'i widoków TABLE_TYPE='VIEW'). Więc jeśli chcesz zobaczyć ze swoich tabel schematu (bazy danych) tylko następujące zapytanie:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'
sbrbot
źródło
2

Myślę, że pomocne może być wskazanie, że jeśli chcesz wybrać tabele zawierające określone słowa, możesz to łatwo zrobić za pomocą SELECT(zamiast SHOW). Poniższe zapytanie łatwo zawęża wyszukiwanie do tabel zawierających „słowo kluczowe”

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
Robert Sinclair
źródło
0

Istnieje jeszcze jeden prostszy sposób na uzyskanie nazw tabel

SHOW TABLES FROM <database_name>
Kowal
źródło
2
To wcale nie odpowiada na pytanie.
Mike Chamberlain,
Pomógł mi, gdy szukałem czegoś, co uderzyło w tytuł pytania.
Shihe Zhang
Nie. To nie jest dobre, ponieważ pokazuje tylko tabele w narzędziach mysql.
TS
0

Poniższe zapytanie działało dla mnie. Może to pokazać bazy danych, tabele, nazwy kolumn, typy danych i liczbę kolumn.

**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
źródło
-3

Aby wstawić, zaktualizować i usunąć, wykonaj następujące czynności:

$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;
Eduardo Krp
źródło
Oczekujemy tutaj angielskiego. Mamy jednak stronę w języku portugalskim: pt.stackoverflow.com
Laurel