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?

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.


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;

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.


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


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


¿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

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


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

0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.