Holen Sie sich Tabellennamen mit der SELECT-Anweisung in MySQL

260

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

SHOW TABLES

Ich möchte diese Tabellennamen jedoch 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 mit einer Standard-SELECT-Anweisung abzurufen?

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Mike Chamberlain
quelle
mögliches Duplikat von stackoverflow.com/questions/64894/…
hafichuk

Antworten:

381

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 abzurufen, verwenden Sie:

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

Verwenden Sie nun diese Frage, um die ursprüngliche Frage zu beantworten:

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

Weitere Informationen finden Sie unter: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Murilo Garcia
quelle
144

Versuchen:

select * from information_schema.tables

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

Nthalk
quelle
4
Dies weist in die richtige Richtung, beantwortet aber die Frage nicht wirklich. Könnte mehr ausarbeiten.
Murilo Garcia
@MuriloGarcia information_schema ist Teil des SQL-Standards. Postgres hat es auch. Für SQLite suchen Sie insqlite_master
Peterchaula
Abrufen von Tabellen nach Namen mit LIKE: SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% keyword%';
Jarrett Barnett
19

Wenn wir mehrere Datenbanken haben und alle Tabellen für eine bestimmte Datenbank auswählen müssen, können wir TABLE_SCHEMAden Datenbanknamen wie folgt definieren:

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

Abs
quelle
12

Neben der Verwendung der Tabelle INFORMATION_SCHEMA verwenden Sie Folgendes, um SHOW TABLES zum Einfügen in eine Tabelle zu 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);
 }
?>
James Williams
quelle
8

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

GolezTrol
quelle
5
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Steven Soroka
quelle
3
Darf ich Sie bitten, Ihrer Antwort einen weiteren Kontext hinzuzufügen. Nur-Code-Antworten sind schwer zu verstehen. Es wird sowohl dem Fragesteller als auch zukünftigen Lesern helfen, wenn Sie Ihrem Beitrag weitere Informationen hinzufügen können.
RBT
4

Die MySQL- INFORMATION_SCHEMA.TABLESTabelle enthält Daten sowohl zu Tabellen (nicht temporären, sondern permanenten) als auch zu Ansichten. Die Spalte TABLE_TYPEdefiniert, ob dies ein Datensatz für eine Tabelle oder eine Ansicht ist (für Tabellen TABLE_TYPE='BASE TABLE'und für Ansichten TABLE_TYPE='VIEW'). Wenn Sie also nur aus Ihren Schema- (Datenbank-) Tabellen sehen möchten, gibt es die folgende Abfrage:

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

Ich denke, es kann hilfreich sein, darauf hinzuweisen, dass Sie, wenn Sie Tabellen auswählen möchten, die bestimmte Wörter enthalten, dies einfach mit SELECT(anstelle von SHOW) tun können . Die folgende Abfrage schränkt die Suche leicht auf Tabellen ein, die "Schlüsselwort" enthalten.

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

Es gibt noch einen einfacheren Weg, um Tabellennamen zu erhalten

SHOW TABLES FROM <database_name>
Schmied
quelle
2
Dies beantwortet die Frage überhaupt nicht.
Mike Chamberlain
Hat mir geholfen, als ich nach etwas gesucht habe, das den Titel der Frage getroffen hat.
Shihe Zhang
Nein. Dies ist nicht gut, da nur die Tabellen in MySQL-Tools angezeigt werden.
TS
0

Diese folgende Abfrage hat bei mir funktioniert. Dadurch können Datenbanken, Tabellen, Spaltennamen, Datentypen und Spaltenanzahl angezeigt werden.

**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
quelle
-3

Gehen Sie wie folgt vor, um einzufügen, zu aktualisieren und zu löschen:

$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
quelle
Wir erwarten hier Englisch. Wir haben jedoch eine Website in Portugiesisch unter: pt.stackoverflow.com
Laurel