Come ottenere la struttura del database in MySQL tramite query


171

È possibile in qualche modo ottenere la struttura del database MySQL o solo una tabella con una query semplice?

O c'è un altro modo, come posso farlo?

Risposte:


261

Penso che quello che cerchi sia DESCRIBE

DESCRIBE table;

Puoi anche usare SHOW TABLES

SHOW TABLES;

per ottenere un elenco delle tabelle nel database.


6
Per utilizzare un database specifico: SHOW TABLES FROM database_name
Tarik,

109

Per ottenere l'intera struttura del database come un insieme di istruzioni CREATE TABLE , utilizzare mysqldump :

mysqldump database_name --compact --no-data

Per le singole tabelle, aggiungi il nome della tabella dopo il nome db in mysqldump. Ottieni gli stessi risultati con SQL e SHOW CREATE TABLE :

SHOW CREATE TABLE table;

O DESCRIVERE se si preferisce un elenco di colonne:

DESCRIBE table;

3
show create tableera esattamente quello che stavo cercando. Grazie!
Shai,

questa non è la soluzione, ma sono grato perché non sapevo che questa funzione esistesse ed è eccezionale!
Ari Waisberg,

41

Dai un'occhiata a INFORMATION_SCHEMA. TABLEStavolo. Contiene metadati su tutte le tue tabelle.

Esempio:

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

Il vantaggio di questo rispetto ad altri metodi è che puoi facilmente utilizzare query come quella sopra come sottoquery nelle altre tue query.


6
Non è che dovrebbe essere information_schema. columns(usando columnstable invece di tables? Perché tablesnon contiene alcuna informazione su quali tipi sono le colonne della tabella
Dimitry K

Il secondo vantaggio è che lo schema delle informazioni viene caricato in memoria all'avvio del server, quindi non è necessario leggere l'hdd
bortunac il

sì, sicuramente dovrebbero essere COLUMS piuttosto che TAVOLI! Funziona a meraviglia!
Russell Fulton,

32

usando questo:

SHOW CREATE TABLE `users`;

ti darà il DDL per quella tabella

DESCRIBE `users`

elencherà le colonne in quella tabella


1
anima gemella, certo che è una dichiarazione DDL per quella tabella
duckyflip

Sì, è un'istruzione in un DDL, ma una funzione C non è di per sé C. C è un linguaggio, una funzione in un programma C è un costrutto all'interno di quel linguaggio.
soulmerge,

18
@soulmerge, anch'io sono un pedante, ma penso che tu abbia torto qui: "Il francese per 'grazie' è 'merci'" è una frase inglese abbastanza accettabile (non meno di "La parola francese per", ecc.) e questo si generalizza a "Il {{nome lingua}} per {{cosa da esprimere}}" come "Il DDL per questa tabella". "La funzione AC non è di per sé C" equivale a dire "Una parola francese non è di per sé francese": beh non è TUTTO il francese ovviamente, ma dire "'Au revoir' è francese" è difficilmente discutibile (come ovviamente significa che fa parte del francese, non del tutto francese! -).
Alex Martelli,

@soulmerge. Sì, sicuramente un motivo per votare ... Buon divertimento!
Mate00

dafuqq sta succedendo qui
Niton l'

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

dove Table_schemaè il nome del database


c'è un modo per selezionare lo schema informativo. colonne - tabelle da particolari db?
Shan,

Ho usato questa domanda da parte miaSELECT 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

Una variante della prima risposta che ho trovato utile

Apri il prompt dei comandi e inserisci (non è necessario accedere al server mysql)

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

Mi piace questo, dà le istruzioni create.
Giovedì

2

SELEZIONA COLUMN_NAME DA INFORMATION_SCHEMA. COLUMNS WHERE TABLE_SCHEMA= 'bodb' AND TABLE_NAME= 'abc';

funziona per ottenere tutti i nomi di colonna


2

Nel seguente esempio,

playgroundè il nome del database ed equipmentè il nome della tabella

Un altro modo è usare SHOW-COLUMNS: 5.5 (disponibile anche per 5.5>)

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

E l'output:

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

Si può anche usare mysqlshow-client (disponibile anche per 5.5>) come il seguente:

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

E l'output:

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

Al giorno d'oggi, le persone usano DESCinvece di DESCRIPTION. Per esempio:- DESC users;

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.