Como obter estrutura de banco de dados no MySQL via query


171

É possível, de alguma forma, obter estrutura do banco de dados MySQL, ou apenas alguma tabela com consulta simples?

Ou existe outra maneira, como posso fazer isso?

Respostas:


260

Eu acho que o que você procura é DESCRIBE

DESCRIBE table;

Você também pode usar SHOW TABLES

SHOW TABLES;

para obter uma lista das tabelas no seu banco de dados.


6
Para direcionar o uso de banco de dados específico: SHOW TABLES FROM database_name
Tarik 27/05

109

Para obter toda a estrutura do banco de dados como um conjunto de instruções CREATE TABLE , use mysqldump :

mysqldump database_name --compact --no-data

Para tabelas únicas, adicione o nome da tabela após o nome do banco de dados no mysqldump. Você obtém os mesmos resultados com SQL e SHOW CREATE TABLE :

SHOW CREATE TABLE table;

Ou DESCREVA se você preferir uma lista de colunas:

DESCRIBE table;

3
show create tableera exatamente o que eu estava procurando. Obrigado!
Shai

esta não é a solução, mas estou agradecido porque não sabia que essa função existe e é ótima!
Ari Waisberg

41

Dê uma olhada no INFORMATION_SCHEMA. TABLEStabela. Ele contém metadados sobre todas as suas tabelas.

Exemplo:

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

A vantagem disso em relação a outros métodos é que você pode usar facilmente consultas como a acima como subconsultas em outras consultas.


6
Não é que deveria ser information_schema. columns(usando columnsa tabela em vez de tablesPorque? tablesnão contém qualquer informação sobre quais tipos são as colunas da tabela
Dimitry K

2º vantagem é que esquema de informações é carregado na memória na inicialização do servidor de forma que nenhum HDD lendo neccesary
bortunac

sim, definitivamente deve ser COLUMS ao invés de TABELAS! Isso funciona um prazer!
Russell Fulton

32

usando isso:

SHOW CREATE TABLE `users`;

lhe dará o DDL para essa tabela

DESCRIBE `users`

listará as colunas nessa tabela


1
soulmerge, certeza de que é uma instrução DDL para essa tabela
duckyflip

Sim, é uma declaração em uma DDL, mas uma função C não é por si só C. C é uma linguagem, uma função em um programa C é uma construção dentro dessa linguagem.
soulmerge

18
@soulmerge, eu também sou pedante, mas acho que você está errado aqui: "O francês por 'obrigado' é 'merci'" é uma frase em inglês bastante aceitável (nada menos que "A palavra francesa para", etc) , e isso generaliza para "O {{nome do idioma}} para {{coisa a expressar}}", como "O DDL para esta tabela". "A função CA não é por si só C" é o mesmo que dizer "uma palavra francesa não é por si só francesa": bem, não é TODO francês, é claro, mas dizer "'Au revoir' é francês" dificilmente é questionável (como obviamente significa que faz parte do francês, não todo francês! -).
Alex Martelli

@soulmerge. Sim, definitivamente uma razão para votar ... Aproveite!
mate00

dafuqq está acontecendo aqui
Niton

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

onde Table_schemaé o nome do banco de dados


existe uma maneira de selecionar o esquema de informações. colunas - tabelas de determinado banco de dados?
Shan

Eu usei esta consulta no meu finalSELECT 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

Uma variação da primeira resposta que achei útil

Abra seu prompt de comando e digite (você não precisa estar logado no servidor mysql)

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

Eu gosto disso, ele fornece as instruções create.
Thufir

2

SELECIONE COLUMN_NAME DE INFORMATION_SCHEMA. COLUMNS WHERE TABLE_SCHEMA= 'bodb' AND TABLE_NAME= 'abc';

funciona para obter todos os nomes de coluna


2

No exemplo a seguir,

playgroundé o nome do banco de dados e equipmenté o nome da tabela

Outra maneira é usar SHOW-COLUMNS: 5.5 (disponível também para 5.5>)

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

E a saída:

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

Também é possível usar o mysqlshow-client (também disponível para 5.5>) como a seguir:

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

E a saída:

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

Hoje em dia, as pessoas usam em DESCvez de DESCRIPTION. Por exemplo:- DESC users;

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.