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?

Jakub Arnold
quelle

Antworten:

260

Ich denke, dass Sie danach suchen DESCRIBE

DESCRIBE table;

Sie können auch verwenden SHOW TABLES

SHOW TABLES;

um eine Liste der Tabellen in Ihrer Datenbank zu erhalten.

Bill die Eidechse
quelle
6
Um auf bestimmte Datenbanken SHOW TABLES FROM database_name
abzuzielen,
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;
Eemeli Kantola
quelle
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.

Zenshai
quelle
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

duckyflip
quelle
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?

aschfahl
quelle
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
LGG
quelle
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

Raja Nagendra Kumar
quelle
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 |         |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
Shudipta Sharma
quelle
0

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

Sh4dy
quelle