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.