it-swarm-eu.dev

Wählen Sie Daten aus der MySQL-Abfrage "Tabellen anzeigen" aus

Ist es möglich, aus show tables in MySQL?

SELECT * FROM (SHOW TABLES) AS `my_tables`

Etwas in diese Richtung, obwohl das oben Genannte nicht funktioniert (zumindest auf 5.0.51a).

52
BioTronic

Ich denke du willst SELECT * FROM INFORMATION_SCHEMA.TABLES

Siehe http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

42
Andrew

Nicht, dass ich wüsste, es sei denn, Sie wählen aus INFORMATION_SCHEMA, wie andere erwähnt haben.

Der Befehl SHOW ist jedoch ziemlich flexibel, z.

SHOW tables like '%s%'
20
Lucas Oman

Zählen:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;

Auflisten:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
11
Ivan Ferrer

Möglicherweise sind Sie näher dran als Sie denken - SHOW TABLES verhält sich bereits sehr ähnlich wie SELECT:

$pdo = new PDO("mysql:Host=$Host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}
4
Bob Stein

Haben Sie sich mit der Abfrage von INFORMATION_SCHEMA.Tables befasst? Wie in

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
4
BigJim

Sie können SHOW -Anweisungen nicht wie in Ihrem Beispiel in eine Unterabfrage einfügen. Die einzige Anweisung, die in eine Unterabfrage aufgenommen werden kann, ist SELECT.

Wie bereits in anderen Antworten erwähnt, können Sie das INFORMATION_SCHEMA direkt mit SELECT abfragen und erhalten auf diese Weise viel mehr Flexibilität.

Die SHOW -Anweisungen von MySQL sind nur interne Abfragen der INFORMATION_SCHEMA-Tabellen.

Der Benutzer @physicalattraction hat diesen Kommentar zu den meisten anderen Antworten gepostet:

Dies gibt Ihnen (Meta-) Informationen zu den Tabellen, nicht zum Inhalt der Tabelle, wie vom OP beabsichtigt. - körperliche Anziehung

Im Gegenteil, die Frage des OP besagt nicht, dass die Daten in allen Tabellen ausgewählt werden sollen. Sie sagen, sie möchten aus dem Ergebnis von SHOW TABLES Auswählen, das nur eine Liste von Tabellennamen ist.

Wenn das OP alle Daten aus allen Tabellen auswählen möchte, lautet die Antwort Nein, Sie können dies nicht mit einer Abfrage tun. Jede Abfrage muss ihre Tabellen explizit benennen. Sie können einen Tabellennamen nicht als Variable oder Ergebnis eines anderen Teils derselben Abfrage definieren. Außerdem müssen alle Zeilen eines bestimmten Abfrageergebnisses die gleichen Spalten haben.

Die einzige Möglichkeit, alle Daten aus allen Tabellen auszuwählen, besteht darin, SHOW TABLES Auszuführen und dann für jede in diesem Ergebnis genannte Tabelle eine andere Abfrage auszuführen.

4
Bill Karwin

Sie können eine gespeicherte Prozedur erstellen, die Tabellennamen in einen Cursor einfügen und dann Ihre Tabellennamen durchlaufen, um die Daten anzuzeigen.

Erste Schritte mit einer gespeicherten Prozedur: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

Erstellen eines Cursors: http://www.mysqltutorial.org/mysql-cursor/

Beispielsweise,

CREATE PROCEDURE `ShowFromTables`()
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";

DECLARE table_cursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';

DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1;

OPEN table_cursor;

get_data: LOOP

FETCH table_cursor INTO c_table;

IF v_finished = 1 THEN 
LEAVE get_data;
END IF;

SET @s=CONCAT("SELECT * FROM ",c_table,";");

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP get_data;

CLOSE table_cursor;

END

Rufen Sie dann die gespeicherte Prozedur auf:

CALL ShowFromTables();
3
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

Dies gibt den Kommentar zu myTable.myColumnName zurück

3
Brian

Ich denke, was Sie wollen, ist MySQLs information_schema view (s): http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3
Matt Rogish
SELECT * FROM INFORMATION_SCHEMA.TABLES

Das sollte ein guter Anfang sein. Weitere Informationen finden Sie unter INFORMATION_SCHEMA Tables .

3
Sören Kuklau

in MySQL 5.1 können Sie versuchen

show tables like 'user%';

Ausgabe:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)
2
MT467

Ja, SELECT von table_schema könnte für die Systemadministration sehr nützlich sein. Wenn Sie viele Server, Datenbanken, Tabellen ... haben, müssen Sie manchmal einige Elemente DROP oder UPDATE. Um zum Beispiel eine Abfrage für DROP alle Tabellen mit dem Präfixnamen "wp_old _..." zu erstellen:

SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
2
Srdjan

Ich verstehe nicht, warum Sie SELECT * FROM Als Teil der Anweisung verwenden möchten.

12.5.5.30. SHOW TABLES Syntax

1
Derek B. Bell