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?

Jakub Arnold
fonte

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.

Bill the Lizard
fonte
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;
Eemeli Kantola
fonte
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.

Zenshai
fonte
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

duckyflip
fonte
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

acinzentado
fonte
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
LGG
fonte
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

Raja Nagendra Kumar
fonte
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 |         |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
Shudipta Sharma
fonte
0

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

Sh4dy
fonte