So erhalten Sie die Datenbankstruktur in MySQL per Abfrage


171

Ist es möglich, eine Struktur der MySQL-Datenbank oder nur eine Tabelle mit einer einfachen Abfrage zu erhalten?

Oder gibt es einen anderen Weg, wie kann ich das machen?

Antworten:



109

Verwenden Sie mysqldump, um die gesamte Datenbankstruktur als Satz von CREATE TABLE- Anweisungen abzurufen :

mysqldump database_name --compact --no-data

Fügen Sie für einzelne Tabellen den Tabellennamen nach dem Datenbanknamen in mysqldump hinzu. Mit SQL und SHOW CREATE TABLE erhalten Sie dieselben Ergebnisse :

SHOW CREATE TABLE table;

Oder BESCHREIBEN Sie, wenn Sie eine Spaltenauflistung bevorzugen:

DESCRIBE table;

3
show create tablewar genau das, wonach ich gesucht habe. Vielen Dank!
Shai

Dies ist nicht die Lösung, aber ich bin dankbar, weil ich nicht wusste, dass diese Funktion existiert und großartig ist!
Ari Waisberg

41

Schauen Sie sich das an INFORMATION_SCHEMA. TABLESTabelle. Es enthält Metadaten zu allen Ihren Tabellen.

Beispiel:

SELECT * FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE TABLE_NAME LIKE 'table1'

Dies hat gegenüber anderen Methoden den Vorteil, dass Sie Abfragen wie die oben beschriebene problemlos als Unterabfragen in Ihren anderen Abfragen verwenden können.


6
Ist es nicht , dass es sein sollte information_schema. columns(Verwenden von columnsTabelle anstelle von tables? Weil tableskeine Informationen darüber enthalten, welche Typen die Tabellenspalten sind
Dimitry K

Der zweite Vorteil ist, dass das Informationsschema beim Serverstart in den Speicher geladen wird, sodass kein Festplattenlesen erforderlich ist
bortunac

ja, sollte definitiv eher COLUMS als TABLES sein! Das ist ein Vergnügen!
Russell Fulton

32

mit diesem:

SHOW CREATE TABLE `users`;

gibt Ihnen die DDL für diese Tabelle

DESCRIBE `users`

listet die Spalten in dieser Tabelle auf


1
soulmerge, sicher ist es eine DDL-Anweisung für diesen Tisch
duckyflip

Ja, es ist eine Anweisung in einer DDL, aber eine C-Funktion ist nicht für sich. C. C ist eine Sprache, eine Funktion in einem C-Programm ist ein Konstrukt in dieser Sprache.
Soulmerge

18
@soulmerge, ich bin auch ein Pedant, aber ich denke, du liegst hier falsch: "Das Französisch für 'Danke' ist 'merci'" ist ein akzeptabler englischer Satz (nicht weniger als "Das französische WORT für" usw.) , und dies verallgemeinert sich auf "Der {{Sprachname}} für {{Ding zum Ausdrücken}}" wie "Die DDL für diese Tabelle". "AC-Funktion ist nicht von selbst C" ist dasselbe wie "Ein französisches Wort ist nicht von sich aus französisch": Nun, es ist natürlich nicht ALLES Französisch, aber zu sagen "Au revoir ist französisch" ist kaum zu beanstanden (wie offensichtlich es bedeutet, dass es ein Teil von Französisch ist, nicht ALLES von Französisch! -).
Alex Martelli

@ Soulmerge. Ja, definitiv ein Grund, abzustimmen ... Viel Spaß!
mate00

Dafuqq ist hier los
Niton

19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

Wo Table_schemaist der Datenbankname?


Gibt es eine Möglichkeit, ein Informationsschema auszuwählen? Spalten - Tabellen aus bestimmten Datenbank?
Shan

Ich habe diese Abfrage an meinem Ende verwendetSELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_db_name' AND TABLE_NAME ='users';
Ahmed Numaan


8

Eine Variation der ersten Antwort, die ich nützlich fand

Öffnen Sie Ihre Eingabeaufforderung und geben Sie ein (Sie müssen nicht bei Ihrem MySQL-Server angemeldet sein).

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp

Ich mag das, es gibt die create-Anweisungen.
Thufir

2

AUSWÄHLEN COLUMN_NAME VON INFORMATION_SCHEMA. COLUMNS WHERE TABLE_SCHEMA= 'bodb' AND TABLE_NAME= 'abc';

funktioniert zum Abrufen aller Spaltennamen


2

Im folgenden Beispiel

playgroundist der Datenbankname und equipmentist der Tabellenname

Eine andere Möglichkeit ist die Verwendung von SHOW-COLUMNS: 5.5 (auch verfügbar für 5.5>)

$ mysql -uroot -p<password> -h<host> -P<port> -e \
    "SHOW COLUMNS FROM playground.equipment"

Und die Ausgabe:

mysql: [Warning] Using a password on the command line interface can be insecure.
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| type  | varchar(50) | YES  |     | NULL    |                |
| quant | int(11)     | YES  |     | NULL    |                |
| color | varchar(25) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

Man kann auch mysqlshow-client (auch verfügbar für 5.5>) wie folgt verwenden:

$ mysqlshow -uroot -p<password> -h<host> -P<port> \
    playground equipment

Und die Ausgabe:

mysqlshow: [Warning] Using a password on the command line interface can be insecure.
Database: playground  Table: equipment
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type        | Collation         | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int(11)     |                   | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| type  | varchar(50) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
| quant | int(11)     |                   | YES  |     |         |                | select,insert,update,references |         |
| color | varchar(25) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+

0

Heutzutage verwenden die Leute DESCstatt DESCRIPTION. Beispielsweise:- DESC users;

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.