Cómo obtener la estructura de la base de datos en MySQL mediante una consulta

171

¿Es posible obtener de alguna manera la estructura de la base de datos MySQL, o simplemente alguna tabla con una consulta simple?

¿O hay otra forma, cómo puedo hacerlo?

Jakub Arnold
fuente

Respuestas:

261

Creo que lo que buscas es DESCRIBE

DESCRIBE table;

También puedes usar SHOW TABLES

SHOW TABLES;

para obtener una lista de las tablas en su base de datos.

Bill el lagarto
fuente
66
Para orientar el uso de una base de datos específica: SHOW TABLES FROM database_name
Tarik
109

Para obtener toda la estructura de la base de datos como un conjunto de instrucciones CREATE TABLE , use mysqldump :

mysqldump database_name --compact --no-data

Para tablas individuales, agregue el nombre de la tabla después del nombre db en mysqldump. Obtiene los mismos resultados con SQL y SHOW CREATE TABLE :

SHOW CREATE TABLE table;

O DESCRIBA si prefiere una lista de columnas:

DESCRIBE table;
Eemeli Kantola
fuente
3
show create tableera exactamente lo que estaba buscando. ¡Gracias!
Shai
Esta no es la solución, pero estoy agradecido porque no sabía que esta función existe y es genial.
Ari Waisberg
41

Echa un vistazo a la INFORMATION_SCHEMA. TABLESmesa. Contiene metadatos sobre todas sus tablas.

Ejemplo:

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

La ventaja de esto sobre otros métodos es que puede usar fácilmente consultas como la anterior como subconsultas en sus otras consultas.

Zenshai
fuente
66
¿No es así information_schema? columns(¿usa la columnstabla en lugar de tables? Porque tablesno contiene ninguna información sobre qué tipos son las columnas de la tabla)
Dimitry K
La segunda ventaja es que el esquema de información se carga en la memoria al inicio del servidor, por lo que no es necesario leer el
disco duro
sí, definitivamente debería ser COLUMS en lugar de TABLES! Eso funciona de maravilla!
Russell Fulton
32

usando esto:

SHOW CREATE TABLE `users`;

te dará el DDL para esa tabla

DESCRIBE `users`

enumerará las columnas en esa tabla

duckyflip
fuente
1
soulmerge, seguro que es una declaración de DDL para esa mesa
duckyflip
Sí, es una declaración en un DDL, pero una función C no es por sí misma C. C es un lenguaje, una función en un programa C es una construcción dentro de ese lenguaje.
soulmerge
18
@soulmerge, yo también soy pedante, pero creo que te equivocas aquí: "El francés para 'gracias' es 'merci'" es una oración bastante aceptable en inglés (no menos que "La PALABRA francesa para", etc.) , y esto se generaliza a "El {{nombre del idioma}} para {{cosa que expresar}}" como "El DDL para esta tabla". "La función de CA no es por sí sola C" es lo mismo que decir "Una palabra francesa no es por sí misma francesa": bueno, no es TODO en francés, por supuesto, pero decir "'Au revoir' es francés" es difícilmente cuestionable (como obviamente significa que es PARTE del francés, ¡NO TODO del francés! -).
Alex Martelli
@soulmerge. Sí, definitivamente una razón para votar ... ¡Disfruta!
mate00
dafuqq está pasando aquí
Niton
19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

donde Table_schemaes el nombre de la base de datos

ashish
fuente
¿hay alguna manera de seleccionar el esquema de información? columnas - tablas de db particular?
Shan
Usé esta consulta de mi parteSELECT 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, el
8

Una variación de la primera respuesta que encontré útil

Abra su símbolo del sistema e ingrese (no tiene que iniciar sesión en su servidor mysql)

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp
LGG
fuente
Me gusta esto, da las declaraciones de creación.
Thufir
2

SELECT COLUMN_NAME DE INFORMATION_SCHEMA. COLUMNS DONDE TABLE_SCHEMA= 'bodb' YTABLE_NAME = 'abc';

funciona para obtener todos los nombres de columna

Raja Nagendra Kumar
fuente
2

En el siguiente ejemplo,

playgroundes el nombre de la base de datos y equipmentes el nombre de la tabla

Otra forma es usar SHOW-COLUMNS: 5.5 (disponible también para 5.5>)

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

Y la salida:

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

También se puede usar mysqlshow-client (también disponible para 5.5>) como sigue:

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

Y la salida:

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
fuente
0

Hoy en día, la gente usa en DESClugar de DESCRIPTION. Por ejemplo:- DESC users;

Sh4dy
fuente