MYSQL – ALTER, DROP, RENOMEAR, MODIFICAR
⚡ Resumo Inteligente
ALTERAR, REMOVER, RENOMEAR e MODIFICAR são os MySQL Comandos que remodelam um banco de dados depois que ele já está em uso. Eles adicionam, removem, renomeiam e redefinem objetos como tabelas e colunas sem descartar as linhas já armazenadas.

O que é o comando ALTER em MySQL?
O ALTERAR O comando modifica um banco de dados, tabela, visão ou outro objeto de banco de dados existente que precisa ser alterado durante o ciclo de vida do banco de dados. É o comando que permite que um esquema evolua depois de já ter sido criado e preenchido com dados.
Os requisitos de negócios raramente permanecem estáticos, e o design de um banco de dados precisa evoluir com eles. Suponha que o design do banco de dados do Myflix já tenha sido implementado e os usuários estejam trabalhando com ele, e somente então a equipe percebe que informações vitais foram omitidas. Ninguém quer perder as linhas existentes; eles simplesmente querem registrar as novas informações ao lado delas.
O comando ALTER abrange exatamente essa situação. Ele pode alterar o tipo de dados de um campo de string para número, renomear um campo ou adicionar uma coluna totalmente nova a uma tabela, mantendo intactos os dados já armazenados na tabela.
Com a finalidade do comando estabelecida, o próximo passo é a sintaxe que o executa.
MySQL ALTER Syntax
A sintaxe básica usada para adicionar uma coluna a uma tabela já existente é mostrada abaixo.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
AQUI
- “ALTER TABLE `nome_tabela`” é o comando que diz MySQL servidor para modificar a tabela chamada `table_name`.
- “ADICIONAR COLUNA `nome_coluna` `tipo_dados`” é o comando que diz MySQL servidor para adicionar uma nova coluna chamada `column_name` com o tipo de dados `data_type`.
Suponha que a Myflix tenha introduzido faturamento e pagamentos online. Para dar suporte a isso, um campo para o número do cartão de crédito precisa ser adicionado à tabela de membros. Antes de fazer qualquer alteração, vale a pena analisar a estrutura atual da tabela. O script mostrado abaixo faz isso.
SHOW COLUMNS FROM `members`;
| Campo | Formato | Nulo | Chave | Padrão | Extra |
|---|---|---|---|---|---|
| número de membro | int (11) | NÃO | PRI | NULL | Incremento automático |
| nomes completos | varchar(350) | NÃO | NULL | ||
| gênero | varchar(6) | SIM | NULL | ||
| data_de_nascimento | dados | SIM | NULL | ||
| endereço físico | varchar(255) | SIM | NULL | ||
| endereço_postal | varchar(255) | SIM | NULL | ||
| número_de_contato | varchar(75) | SIM | NULL | ||
| varchar(255) | SIM | NULL |
💡 Nota sobre int(11): O número entre parênteses indica apenas a largura da tela. MySQL A versão 8.0.17 tornou obsoleto o uso desse recurso para tipos inteiros, portanto, um servidor moderno reporta essa coluna simplesmente como intO tamanho do armazenamento permanece inalterado.
O script mostrado abaixo adiciona o novo campo à tabela de membros.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Executar este script no banco de dados myflixdb adiciona uma coluna chamada credit_card_number à tabela members com o tipo de dados VARCHAR. Executar o script SHOW COLUMNS novamente produz o seguinte resultado.
| Campo | Formato | Nulo | Chave | Padrão | Extra |
|---|---|---|---|---|---|
| número de membro | int (11) | NÃO | PRI | NULL | Incremento automático |
| nomes completos | varchar(350) | NÃO | NULL | ||
| gênero | varchar(6) | SIM | NULL | ||
| data_de_nascimento | dados | SIM | NULL | ||
| endereço físico | varchar(255) | SIM | NULL | ||
| endereço_postal | varchar(255) | SIM | NULL | ||
| número_de_contato | varchar(75) | SIM | NULL | ||
| varchar(255) | SIM | NULL | |||
| Número do cartão de crédito | varchar(25) | SIM | NULL |
A linha destacada confirma que o campo `credit_card_number` foi adicionado à tabela `members`, e os dados já presentes nas outras colunas permaneceram inalterados.
Adicionar uma coluna é apenas metade da história. Um esquema também precisa se livrar de objetos que não são mais necessários, e essa é a função do comando DROP.
O que é o comando DROP em MySQL?
O comando DROP exclui um objeto permanentemente. Ele é usado para
- Excluir um banco de dados do MySQL servidor.
- Excluir um objeto, como uma tabela ou uma coluna, de um banco de dados.
⚠️ Aviso: A operação DROP não é reversível. Nem o objeto nem as linhas dentro dele podem ser recuperados sem um backup, portanto, execute um SELECT no destino e confirme o backup primeiro.
Cairping uma coluna
No exemplo ALTER acima, uma coluna chamada credit_card_number foi adicionada à tabela members. Suponha que o recurso de faturamento online seja adiado e que essa coluna deva ser removida. O script a seguir faz isso.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
A execução do script remove a coluna `credit_card_number` da tabela `members`. Listar as colunas novamente confirma o resultado.
SHOW COLUMNS FROM `members`;
| Campo | Formato | Nulo | Chave | Padrão | Extra |
|---|---|---|---|---|---|
| número de membro | int (11) | NÃO | PRI | NULL | Incremento automático |
| nomes completos | varchar(350) | NÃO | NULL | ||
| gênero | varchar(6) | SIM | NULL | ||
| data_de_nascimento | dados | SIM | NULL | ||
| endereço físico | varchar(255) | SIM | NULL | ||
| endereço_postal | varchar(255) | SIM | NULL | ||
| número_de_contato | varchar(75) | SIM | NULL | ||
| varchar(255) | SIM | NULL |
O número do cartão de crédito desapareceu da lista de campos.
RETIRAR TABELA
A sintaxe para excluir uma tabela inteira de um banco de dados é a seguinte.
DROP TABLE `sample_table`;
Aplicada a um objeto real, a afirmação fica assim.
DROP TABLE `categories_archive`;
Ao executá-lo, a tabela chamada `categories_archive` e todas as suas linhas são excluídas do banco de dados.
SOLTAR BANCO DE DADOS
A mesma palavra-chave remove um esquema inteiro. Adicionar `IF EXISTS` suprime o erro que... MySQL Gera um erro quando o alvo já foi removido, o que é útil em scripts que são executados mais de uma vez.
DROP DATABASE IF EXISTS `myflixdb_backup`;
A remoção de um objeto é definitiva. Quando o objeto em si deve permanecer e apenas o seu nome está incorreto, o comando RENOMEAR é a ferramenta correta.
O que é o comando RENAME em MySQL?
O comando RENAME altera o nome de um objeto de banco de dados existente, como uma tabela ou uma coluna, para um novo nome. Renomear uma tabela não causa a perda de nenhum dos dados nela contidos.
O comando possui a seguinte sintaxe básica.
RENAME TABLE `current_table_name` TO `new_table_name`;
Para renomear a tabela movierentals para movie_rentals, utiliza-se o script abaixo.
RENAME TABLE `movierentals` TO `movie_rentals`;
Ao executar o comando, a tabela `movierentals` é renomeada para `movie_rentals`. Como a renomeação é apenas uma mudança de rótulo, a mesma instrução, executada na ordem inversa, restaura o nome original.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE altera o nome de uma tabela. Renomear uma tabela colunaE a mudança do que ele contém é a função da palavra-chave CHANGE.
ALTERAR Palavra-chave
A palavra-chave CHANGE permite que você
- Alterar o nome de uma coluna
- Alterar o tipo de dados da coluna
- Alterar as restrições da coluna
Considere um exemplo. O campo full_names na tabela members é do tipo de dados varchar com uma largura de 350, como o script abaixo confirma.
SHOW COLUMNS FROM `members`;
| Campo | Formato | Nulo | Chave | Padrão | Extra |
|---|---|---|---|---|---|
| número de membro | int (11) | NÃO | PRI | NULL | Incremento automático |
| nomes completos | varchar(350) | NÃO | NULL | ||
| gênero | varchar(6) | SIM | NULL | ||
| data_de_nascimento | dados | SIM | NULL | ||
| endereço físico | varchar(255) | SIM | NULL | ||
| endereço_postal | varchar(255) | SIM | NULL | ||
| número_de_contato | varchar(75) | SIM | NULL | ||
| varchar(255) | SIM | NULL |
Suponha que o requisito seja
- Alterar o nome do campo de “full_names” para “fullname”
- Altere para o tipo de dados char com uma largura de 250.
- Adicione uma restrição NOT NULL
As três alterações são realizadas por meio de uma única instrução CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Executar o comando no banco de dados myflixdb e, em seguida, executar o script SHOW COLUMNS resulta no seguinte:
| Campo | Formato | Nulo | Chave | Padrão | Extra |
|---|---|---|---|---|---|
| número de membro | int (11) | NÃO | PRI | NULL | Incremento automático |
| nome completo | char (250) | NÃO | NULL | ||
| gênero | varchar(6) | SIM | NULL | ||
| data_de_nascimento | dados | SIM | NULL | ||
| endereço físico | varchar(255) | SIM | NULL | ||
| endereço_postal | varchar(255) | SIM | NULL | ||
| número_de_contato | varchar(75) | SIM | NULL | ||
| varchar(255) | SIM | NULL |
A coluna agora se chama fullname, contém char(250) e rejeita valores NULL.
MODIFICAR Palavra-chave
A palavra-chave MODIFY permite que você...
- Modifique o tipo de dados da coluna.
- Modifique as restrições da coluna
No exemplo de ALTERAÇÃO acima, o nome do campo teve que ser fornecido duas vezes, embora a renomeação fosse apenas parte do objetivo. Omitir o nome do campo em uma instrução CHANGE gera um erro. Quando apenas o tipo de dados e as restrições precisam ser ajustados e o nome deve permanecer como está, o comando MODIFY resolve o problema com apenas uma menção à coluna.
O script abaixo altera a largura do campo "fullname" de 250 para 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Executar o comando no banco de dados myflixdb e, em seguida, executar o script SHOW COLUMNS produz o resultado mostrado abaixo.
| Campo | Formato | Nulo | Chave | Padrão | Extra |
|---|---|---|---|---|---|
| número de membro | int (11) | NÃO | PRI | NULL | Incremento automático |
| nome completo | char (50) | NÃO | NULL | ||
| gênero | varchar(6) | SIM | NULL | ||
| data_de_nascimento | dados | SIM | NULL | ||
| endereço físico | varchar(255) | SIM | NULL | ||
| endereço_postal | varchar(255) | SIM | NULL | ||
| número_de_contato | varchar(75) | SIM | NULL | ||
| varchar(255) | SIM | NULL |
⚠️ Aviso: Ao reduzir o tamanho de uma coluna, os dados que não cabem mais são truncados. Qualquer nome com mais de 50 caracteres é cortado por essa instrução; portanto, verifique o maior valor existente com um `.` SELECIONE Consultar antes de reduzir o tamanho de um campo.
ALTERAR vs MODIFICAR vs RENOMEAR COLUNA
As três palavras-chave se sobrepõem, e escolher a errada é a fonte mais comum de erros nessa área. A tabela abaixo as coloca lado a lado.
| Palavra-chave | Renomeia a coluna | Altera o tipo e as restrições. | Nome antigo necessário | Uso típico |
|---|---|---|---|---|
| MUDANÇA | Sim | Sim | Sim, além do novo nome. | Renomear e redefinir em uma única declaração |
| MODIFICAR | Não | Sim | Nome fornecido uma vez | Ampliar, estreitar ou digitar novamente uma coluna |
| RENOMEAR COLUNA | Sim | Não | Sim, além do novo nome. | Renomear apenas, de MySQL 8.0 em diante |
MySQL A versão 8.0 adicionou uma quarta opção para o caso mais simples: renomear sem qualquer redefinição.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
O tipo e o nome já estão definidos. A questão que resta é onde a nova coluna será inserida na tabela, o que é controlado pela palavra-chave AFTER.
APÓS a palavra-chave
Por padrão, uma coluna adicionada com ALTER TABLE é inserida no final da tabela. Para colocá-la em uma posição específica, o comando ALTER é combinado com a palavra-chave AFTER.
O script abaixo adiciona “date_of_registration” diretamente após date_of_birth na tabela de membros.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Executar o comando no banco de dados myflixdb e, em seguida, executar o script SHOW COLUMNS produz o resultado mostrado abaixo.
| Campo | Formato | Nulo | Chave | Padrão | Extra |
|---|---|---|---|---|---|
| número de membro | int (11) | NÃO | PRI | NULL | Incremento automático |
| nome completo | char (50) | NÃO | NULL | ||
| gênero | varchar(6) | SIM | NULL | ||
| data_de_nascimento | dados | SIM | NULL | ||
| data_de_registro | dados | SIM | NULL | ||
| endereço físico | varchar(255) | SIM | NULL | ||
| endereço_postal | varchar(255) | SIM | NULL | ||
| número_de_contato | varchar(75) | SIM | NULL | ||
| varchar(255) | SIM | NULL |
A linha destacada é a coluna adicionada após `date_of_birth`. A palavra-chave `FIRST` funciona da mesma forma e move a nova coluna para o início da tabela.
