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.