webentwicklung-frage-antwort-db.com.de

Abrufen von Tabellennamen mithilfe der SELECT-Anweisung in MySQL

In MySQL weiß ich, dass ich die Tabellen in einer Datenbank auflisten kann mit:

SHOW TABLES

Ich möchte jedoch diese Tabellennamen in eine andere Tabelle einfügen, zum Beispiel:

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

Gibt es eine Möglichkeit, die Tabellennamen mithilfe einer Standard-SELECT-Anweisung abzurufen, etwa:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
200

Um den Namen aller Tabellen zu erhalten, verwenden Sie:

SELECT table_name FROM information_schema.tables;

Um den Namen der Tabellen aus einer bestimmten Datenbank zu erhalten, verwenden Sie:

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

Um die ursprüngliche Frage zu beantworten, verwenden Sie diese Abfrage:

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

Für weitere Details siehe: http://dev.mysql.com/doc/refman/5.0/de/information-schema.html

270
Murilo Garcia

Versuchen:

select * from information_schema.tables

Siehe: http://dev.mysql.com/doc/refman/5.0/de/information-schema.html

140
Nthalk

wenn wir mehrere Datenbanken haben und alle Tabellen für eine bestimmte Datenbank auswählen müssen, können Sie TABLE_SCHEMA verwenden, um den Datenbanknamen wie folgt zu definieren:

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

17
Abs

Neben der Verwendung der Tabelle INFORMATION_SCHEMA würden Sie zum Einfügen von SHOW TABLES in eine Tabelle Folgendes verwenden

<?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);
 }
?>
12
James Williams

Schauen Sie sich die Tabelle TABLES in der Datenbank information_schema an. Es enthält Informationen zu den Tabellen in Ihren anderen Datenbanken. Wenn Sie jedoch auf Shared Hosting zugreifen, haben Sie wahrscheinlich keinen Zugriff darauf.

8
GolezTrol

Ich denke, Sie können die gewünschten Daten von INFORMATION_SCHEMA TABLES erhalten.

Weitere Informationen finden Sie hier: http://dev.mysql.com/doc/refman/5.0/de/tables-table.html

6
Andrey
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
3
Steven Soroka

Die INFORMATION_SCHEMA.TABLES-Tabelle von MySQL enthält Daten zu beiden Tabellen (nicht temporären, aber permanenten) und Ansichten. Die Spalte TABLE_TYPE definiert, ob es sich um einen Datensatz für eine Tabelle oder Sicht handelt (für Tabellen TABLE_TYPE='BASE TABLE' und für Ansichten TABLE_TYPE='VIEW'). Wenn Sie also nur aus Ihren Schematabellen (Datenbanktabellen) sehen möchten, gibt es folgende Abfrage:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'
3
sbrbot

Ich denke, es kann hilfreich sein, darauf hinzuweisen, dass wenn Sie Tabellen auswählen möchten, die bestimmte Wörter enthalten, Sie dies leicht mit der Variable SELECT (anstelle von SHOW) tun können. Unter der Abfrage wird die Suche auf Tabellen beschränkt, die "Schlüsselwörter" enthalten.

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

Es gibt noch einen einfacheren Weg, Tabellennamen zu erhalten

SHOW TABLES FROM <database_name>
0
Smith