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.