Comment obtenir la structure de la base de données dans MySQL via une requête

171

Est-il possible d'obtenir d'une manière ou d'une autre la structure de la base de données MySQL, ou simplement une table avec une simple requête?

Ou y a-t-il une autre façon, comment puis-je le faire?

Jakub Arnold
la source

Réponses:

261

Je pense que ce que tu cherches c'est DESCRIBE

DESCRIBE table;

Vous pouvez aussi utiliser SHOW TABLES

SHOW TABLES;

pour obtenir une liste des tables de votre base de données.

Bill le lézard
la source
6
Pour cibler une utilisation de base de données spécifique: SHOW TABLES FROM database_name
Tarik
109

Pour obtenir toute la structure de la base de données sous la forme d'un ensemble d' instructions CREATE TABLE , utilisez mysqldump :

mysqldump database_name --compact --no-data

Pour les tables simples, ajoutez le nom de la table après le nom de la base de données dans mysqldump. Vous obtenez les mêmes résultats avec SQL et SHOW CREATE TABLE :

SHOW CREATE TABLE table;

Ou DÉCRIVEZ si vous préférez une liste de colonnes:

DESCRIBE table;
Eemeli Kantola
la source
3
show create tableétait exactement ce que je cherchais. Merci!
Shai
ce n'est pas la solution mais je suis reconnaissant car je ne savais pas que cette fonction existe et c'est génial!
Ari Waisberg le
41

Jetez un œil au INFORMATION_SCHEMA. TABLEStable. Il contient des métadonnées sur toutes vos tables.

Exemple:

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

L'avantage de cette méthode par rapport aux autres méthodes est que vous pouvez facilement utiliser des requêtes telles que celle ci-dessus en tant que sous-requêtes dans vos autres requêtes.

Zenshai
la source
6
N'est-ce pas que ça devrait être information_schema. columns(en utilisant une columnstable au lieu de tables? Parce tablesque ne contient aucune information sur les types de colonnes de la table
Dimitry K
Le deuxième avantage est que le schéma d'informations est chargé en mémoire au démarrage du serveur, donc aucune lecture de disque
dur
oui, cela devrait certainement être COLUMS plutôt que TABLES! Cela fonctionne un régal!
Russell Fulton le
32

en utilisant ceci:

SHOW CREATE TABLE `users`;

vous donnera le DDL pour cette table

DESCRIBE `users`

listera les colonnes de ce tableau

duckyflip
la source
1
soulmerge, bien sûr, c'est une déclaration DDL pour cette table
duckyflip
Oui, c'est une instruction dans un DDL, mais une fonction C n'est pas en soi C. C est un langage, une fonction dans un programme C est une construction dans ce langage.
soulmerge
18
@soulmerge, je suis aussi un pédant, mais je pense que vous vous trompez ici: "Le français pour 'merci' est 'merci'" est une phrase anglaise tout à fait acceptable (pas moins que "The French WORD for", etc.) , et cela se généralise à "Le {{nom de la langue}} pour {{chose à exprimer}}" tel que "Le DDL pour cette table". "La fonction AC n'est pas en soi C" revient à dire "Un mot français n'est pas français en soi": enfin ce n'est pas TOUT du français bien sûr, mais dire "'Au revoir' est français" n'est guère répréhensible (comme évidemment ça veut dire que ça fait partie du français, pas tout le français! -).
Alex Martelli
@soulmerge. Oui, certainement une raison de voter contre ... Profitez-en!
mate00
dafuqq se passe ici
Niton
19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

Table_schemaest le nom de la base de données

cendré
la source
existe-t-il un moyen de sélectionner le schéma d'information. colonnes - tables d'une base de données particulière?
Shan
J'ai utilisé cette requête de mon côtéSELECT 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
15

C'est la requête SHOW CREATE TABLE . Vous pouvez également interroger les TABLES SCHEMA .

SHOW CREATE TABLE YourTableName;
soulmerge
la source
8

Une variante de la première réponse que j'ai trouvée utile

Ouvrez votre invite de commande et entrez (vous n'avez pas besoin d'être connecté à votre serveur mysql)

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp
LGG
la source
J'aime ça, ça donne les instructions de création.
Thufir
2

SÉLECTIONNER COLUMN_NAME DE INFORMATION_SCHEMA. COLUMNS WHERE TABLE_SCHEMA= 'bodb' AND TABLE_NAME= 'abc';

fonctionne pour obtenir tous les noms de colonnes

Raja Nagendra Kumar
la source
2

Dans l'exemple suivant,

playgroundest le nom de la base de données et equipmentest le nom de la table

Une autre façon est d'utiliser SHOW-COLUMNS: 5.5 (disponible également pour 5.5>)

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

Et la sortie:

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

On peut également utiliser mysqlshow-client (également disponible pour 5.5>) comme suit:

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

Et la sortie:

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
la source
0

De nos jours, les gens utilisent à la DESCplace de DESCRIPTION. Par exemple:- DESC users;

Sh4dy
la source