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? */

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


144

Versuchen:

select * from information_schema.tables

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


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


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

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.



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

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'

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%"

0

Es gibt noch einen einfacheren Weg, um Tabellennamen zu erhalten

SHOW TABLES FROM <database_name>

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;**

-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;

Wir erwarten hier Englisch. Wir haben jedoch eine Website in Portugiesisch unter: pt.stackoverflow.com
Laurel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.