Neste artigo estudaremos o comando DESCRIBE , que é de suma importância para analisar tabelas já criadas em um banco de dados do MySQL. Com ele é possível visualizar as colunas, os tipos de dados de cada coluna e os índices definidos para uma tabela, com exceção dos índices que são criados automaticamente para atributos que fazem parte de uma de integridades referênciais.
Além do SHOW CREATE TABLE nome_tabela, temos um outro comando chamado DESCRIBE que nos provê informações sobre as colunas de uma tabela. Existem outros comandos que comentaremos ao final do artigo, mas aquele que mais nos importa e é o foco deste artigo é o comando DESCRIBE.
É de especial importância sabermos interpretar a saída deste comando, pois com ele você saberá quase tudo que ocorre em colunas de tabelas: se esta tem colunas com índices únicos, NOT NULL ou NULL, PRIMARY KEY, quais campos fazer parte de uma PRIMARY KEY ou de um índice não único, qual é o valor DEFAULT para uma determinada coluna, se uma coluna PRIMARY KEY é AUTO_INCREMENT, enfim, vamos criar uma tabela e em seguida emitiremos o comando DESCRIBE <nome_tabela> para verificarmos a sua saída.
Lembramos que DESC é um sinônimo de DESCRIBE.
Tabela:
CREATE TABLE tab_test (
col INT,
col1 ENUM('Wagner', 'Bianchi') DEFAULT 'Bianchi',
col2 VARCHAR(50) NOT NULL,
col3 VARCHAR(50),
col4 TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
UNIQUE(col1, col2),
UNIQUE(col3),
PRIMARY KEY (col)
) Engine =InnoDB;
Copie o código acima e cole no prompt do mysql (mysql client) ou no MySQL Query Browser e execute. Utilizamos o banco de dados testque é um banco de dados que é criado em uma instalação padrão do MySQL 5++. Após compilar o código acima, já teremos nossa tabela para então fazermos uma leitura com a declaração DESCRIBE. A tabela é criada na Figura 1.
Figura 01 – Criamos a tabela.
Ainda no prompt, ou no terminal, dentro do mysql client ou no MySQL Query Browser, escreva o seguinte comando:
mysql> DESCRIBE tab_test;
Pressione ENTER. A saída na tela será a referenciada abaixo na Figura 2.
Figura 02 – Analisamos a saída do comando DESCRIBE.
A saída da declaração DESCRIBE contém uma linha para cada coluna da tabela. As características mais importantes da saída são:
- O valor Field indica o nome da coluna;
- O valor Type indica o tipo de dado da coluna;
- O indicador NULL é a palavra YES se a coluna aceitar valores nulos ou ficará com NO, caso contrário. No exemplo mostrado acima, as colunas col1 e col3 aceitam valores nulos já que estão apresentando YES nesta coluna;
- O indicador Key está preenchido com os três valores possíveis, que cada um tem sua definição:
- PRI: é uma coluna que é a PRIMARY KEY de uma tabela ou faz parte da chave juntamente com outros campos, caso seja uma chave composta. Neste último caso, a coluna KEY será preenchida mais de uma vez com PRI, relacionado aos campo que fazem parte da chave;
- UNI: é a definição de um campo UNIQUE + NOT NULL que é um índice de valores únicos que não aceita NULL(bem parecido com o conceito de chave primária, já que uma chave primária nada mais é que uma conjunção de UNIQUE + NOT NULL);
- MUL: é a definição de uma coluna que é ou é parte de um índice não único que aceitam valores múltiplos e NULL;
- A coluna DEFAULT que tem um caso interessante. Definimos que o DEFAULT da coluna com o tipo de dados ENUM seria Bianchi e definimos para a coluna de tipo de dados TIMESTAMP e valor retornado pela função CURRENT_TIMESTAMP(), que num caso de não ser fornecido um valor em um INSERT, este valor da função seria adicionado ao campo pelo SGBD. O fato de curiosidade é que, nós não definimos um valor DEFAULT para a coluna col3… O que aconteceu? Que NULL é aquele e ali na coluna DEFAULT? Justamente por não termos definido um valor DEFAULT para a coluna que a coluna DEFAULT foi preenchida com NULL.
Se utilizarmos o comando SHOW CREATE TABLE <nome tabela> poderemos visualizar que o SGBD acrescentou o valor NULL ao DEFAULT desta coluna.
O valor Extra exibe outros detalhes sobre a coluna. No nosso exemplo não apareceu nada ainda, mas podemos fazer as coisas diferentes com um comando.
mysql> ALTER TABLE tab_test MODIFY col INT AUTO_INCREMENT;
Agora o nosso DESC já estará diferente, já temos o valor auto_increment na coluna Extra, como mostra a Figura 3.
Figura 03 – Observe a coluna Extra, ela agora nos mostra que a coluna é AUTO_INCREMENT.
Bom, existem outras declarações que podem nos auxiliar a analisar detalhes de tabelas em um banco de dados MySQL, tais como:
- SHOW COLUMNS FROM <nome_banco>.<nome_tabela>
- SHOW FULL COLUMNS FROM <nome_banco>.<nome_tabela>
Um abraço a todos, até mais.