Comandos SQL-DDL: CREATE, ALTER e DROP na construção de bancos de dados
A famosa SQL (sigla para Structured Query Language), é a linguagem padrão usada para definir, consultar, manipular e controlar dados em bancos de dados relacionais. Em outras palavras, SQL é a ponte entre o usuário, o sistema de informação e o Sistema Gerenciador de Banco de Dados, ou SGBD. Por meio dela, um desenvolvedor consegue criar estruturas, registrar dados, consultar informações e estabelecer regras de integridade para que o banco mantenha coerência ao longo do tempo.
A base conceitual da SQL está diretamente ligada ao modelo relacional proposto por Edgar F. Codd. Nesse modelo, os dados são organizados em relações comumente representadas como tabelas, compostas por linhas e colunas. Cada tabela descreve uma entidade ou associação relevante para o domínio do problema, e as relações entre tabelas são formalizadas por chaves primárias e estrangeiras (Codd, 1970). Essa visão foi decisiva para separar a organização lógica dos dados dos detalhes físicos de armazenamento, permitindo que usuários e programadores trabalhassem com uma abstração mais próxima da lógica do negócio.
Base histórica da SQL
Historicamente, a SQL surgiu nos anos 1970, no contexto dos laboratórios da IBM, a partir dos trabalhos de Donald Chamberlin e Raymond Boyce sobre a linguagem SEQUEL, desenvolvida para interagir com o System R, um dos projetos pioneiros de banco de dados relacional (Chamberlin; Boyce, 1974). Com o tempo, a linguagem evoluiu, foi padronizada e passou a ser adotada por diferentes SGBDs, como Oracle Database, PostgreSQL, SQL Server, MySQL, MariaDB e SQLite.
A importância da SQL para a área de sistemas está no fato de que praticamente todo sistema de informação precisa persistir dados. Sistemas acadêmicos, lojas virtuais, aplicativos bancários, redes sociais, prontuários eletrônicos, ERPs e plataformas educacionais dependem de bancos de dados para armazenar informações de forma estruturada, consistente e recuperável. Por isso, compreender SQL é uma competência fundamental para desenvolvedores, analistas de dados, administradores de banco de dados e profissionais de engenharia de software.
Dentro da SQL, os comandos costumam ser classificados em grupos. Os comandos DDL (sigla para Data Definition Language), são aqueles voltados à definição da estrutura do banco de dados. Eles criam, alteram e removem objetos como bancos, tabelas, colunas, chaves, índices e restrições. Entre os comandos DDL mais importantes estão CREATE, ALTER e DROP. Em termos simples:
CREATEcria estruturasALTERmodifica estruturas existenteDROPremove estruturas do banco.
Segundo Elmasri e Navathe (2011), a definição adequada do esquema do banco é uma etapa crítica porque estabelece as entidades, atributos, restrições e relacionamentos que sustentarão o funcionamento da aplicação. Uma tabela mal criada pode gerar inconsistência, redundância, dificuldade de manutenção e perda de integridade. Por isso, aprender os comandos DDL significa compreender como modelar tecnicamente a estrutura que dará suporte ao sistema.
SGBD MySQL
O MySQL é um Sistema Gerenciador de Banco de Dados Relacional (SGBD) amplamente usado em aplicações web, sistemas corporativos, aplicações educacionais e projetos de pequeno, médio e grande porte. Ele surgiu na década de 1990, em um cenário marcado pela expansão da web, pelo fortalecimento do software livre e pela necessidade de bancos de dados relacionais rápidos, acessíveis e integráveis a linguagens de programação usadas em servidores web.
Sua popularização esteve muito associada ao ecossistema LAMP, formado por Linux, Apache, MySQL e PHP, Perl ou Python. Esse conjunto tornou-se uma base comum para desenvolvimento web por combinar sistema operacional, servidor web, banco de dados e linguagem de programação em uma pilha relativamente simples de instalar e operar. Para quem está estudando, o MySQL é especialmente útil porque permite aprender conceitos relacionais clássicos sem depender de ambientes excessivamente complexos.
O MySQL pode ser instalado em diferentes sistemas operacionais, como Windows, Linux e macOS. No Windows, é comum usar o MySQL Installer, que facilita a instalação do servidor, ferramentas gráficas e conectores. Em distribuições Linux, o MySQL pode ser instalado pelos gerenciadores de pacotes ou por repositórios específicos. No macOS, há instaladores próprios e também alternativas via gerenciadores como Homebrew. Em ambientes educacionais, também é frequente o uso de pacotes integrados como XAMPP, WAMP, MAMP ou Laragon, que instalam Apache, PHP, MySQL (ou MariaDB) e phpMyAdmin em um único ambiente, conforme apresentado na Figura 1.

Fonte: Retirado de https://wpexperts.io/blog/xampp-vs-wamp-vs-mamp-vs-lamp/.
As principais formas de manipular o MySQL atualmente incluem o terminal, ferramentas gráficas e interfaces web. Pelo terminal, o usuário interage diretamente com o servidor por meio do cliente mysql, escrevendo comandos SQL em modo texto. O MySQL Workbench oferece uma interface gráfica voltada a modelagem, administração, desenvolvimento SQL, execução de scripts e inspeção visual de tabelas. O phpMyAdmin, por sua vez, é uma ferramenta web escrita em PHP que permite administrar bancos MySQL e MariaDB pelo navegador, criar bancos, criar tabelas, alterar campos, executar consultas SQL e gerenciar usuários.
Para fins didáticos, este artigo usará o phpMyAdmin como ambiente de treino. A razão é simples: ele permite que visualizemos os bancos, tabelas e colunas criados, ao mesmo tempo em que executa comandos SQL manualmente. Isso favorece a aprendizagem ao aproximar o comando textual da estrutura visual gerada no banco.
Exemplo prático: criando a Biblioteca da Vila dos Códigos
Para treinar comandos DDL, vamos imaginar um cenário contínuo: a Biblioteca da Vila dos Códigos. Essa biblioteca começou pequena, com alguns livros e autores, mas está crescendo. O sistema precisa registrar livros, autores e empréstimos. À medida que novas necessidades aparecem, a estrutura do banco será criada, alterada, renomeada e, ao final, removida.
No phpMyAdmin, os comandos podem ser executados pela aba “SQL”. Em geral, o estudante seleciona o servidor ou o banco desejado, abre a aba SQL, cola o comando e executa. A cada operação, é recomendável conferir na lateral esquerda se o banco, as tabelas e as colunas foram criadas ou alteradas conforme esperado. Identifique os campos citados na Figura 2.

Fonte: Autoria própria.
Criar um banco de dados
O primeiro passo é criar o banco da biblioteca. Em SQL, um banco de dados é uma estrutura lógica que agrupa tabelas, visões, procedimentos, restrições e outros objetos relacionados a uma aplicação.
CREATE DATABASE biblioteca_vila_codigos;Depois de criar o banco, é necessário selecioná-lo para que os próximos comandos sejam executados dentro dele.
USE biblioteca_vila_codigos;O comando CREATE DATABASE cria uma nova base de dados. O comando USE não é DDL, mas é útil no treino porque informa ao MySQL qual banco será usado nos comandos seguintes.
Alterar a estrutura do banco
No MySQL, o comando ALTER DATABASE permite alterar algumas propriedades do banco, como conjunto de caracteres e collation. O conjunto de caracteres define quais caracteres podem ser armazenados. A collation define regras de comparação e ordenação de textos.
ALTER DATABASE biblioteca_vila_codigos
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;Essa alteração é importante porque utf8mb4 oferece suporte adequado a acentos, cedilha, símbolos e emojis. Em sistemas reais, escolher corretamente o conjunto de caracteres evita problemas em nomes de pessoas, títulos de livros e textos digitados pelos usuários.
Renomear o banco de dados
Em alguns SGBDs, renomear um banco pode parecer uma operação simples. No MySQL moderno, essa operação exige cuidado. O comando RENAME DATABASE existiu em versões antigas, mas foi removido por problemas de segurança e consistência. Portanto, a forma mais segura de “renomear” um banco é criar um novo banco e transferir as tabelas para ele, ou exportar e importar os dados.
Podemos exportar o banco antigo em formato SQL usando o mecanismo de exportação e importação do phpMyAdmin, criar o novo banco e importar o arquivo. Esse procedimento preserva melhor a lógica de backup e permite revisar o script gerado antes da execução.
Como ainda estamos no início e não há tabelas criadas, podemos simular o renomeio criando um novo banco e descartando o antigo. Considerando o crescimento da Biblioteca da Vila dos Códigos, passaremos a chamá-la de Biblioteca da Vila Digital, para representar o novo contexto em que ela se encontra.
CREATE DATABASE biblioteca_vila_digital
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
DROP DATABASE biblioteca_vila_codigos;
USE biblioteca_vila_digital;Em ambiente de produção, esse procedimento deve ser feito com backup, janela de manutenção e validação. O comando DROP DATABASE apaga o banco e seus objetos internos. Portanto, ele deve ser usado com extrema cautela.
Criar tabelas dentro do banco
Agora, a Biblioteca da Vila Digital precisa registrar autores e livros. Para isso, criaremos duas tabelas: autores e livros.
CREATE TABLE autores (
id_autor INT AUTO_INCREMENT,
nome_autor VARCHAR(120) NOT NULL,
nacionalidade VARCHAR(80),
ano_nascimento INT,
PRIMARY KEY (id_autor)
);A tabela autores possui uma chave primária chamada id_autor. A chave primária identifica unicamente cada registro e, segundo Silberschatz, Korth e Sudarshan (2020), restrições de integridade, como chaves primárias e estrangeiras, são fundamentais para preservar a consistência dos dados em bancos relacionais.
Agora criaremos a tabela de livros:
CREATE TABLE livros (
id_livro INT AUTO_INCREMENT,
titulo VARCHAR(150) NOT NULL,
ano_publicacao INT,
genero VARCHAR(80),
id_autor INT,
PRIMARY KEY (id_livro),
CONSTRAINT fk_livros_autores
FOREIGN KEY (id_autor)
REFERENCES autores(id_autor)
);Aqui, id_livro é a chave primária da tabela livros. A coluna id_autor é uma chave estrangeira que aponta para autores(id_autor). Isso significa que um livro só pode referenciar um autor previamente cadastrado. Essa regra representa um relacionamento entre as tabelas e ajuda a evitar registros órfãos.
Alterar a estrutura das tabelas inserindo colunas
Com o tempo, a bibliotecária percebeu que seria útil registrar o número de páginas dos livros. Para isso, usamos ALTER TABLE com ADD COLUMN.
ALTER TABLE livros
ADD COLUMN numero_paginas INT;Depois, a biblioteca decidiu registrar também a editora.
ALTER TABLE livros
ADD COLUMN editora VARCHAR(120);O comando ALTER TABLE altera a estrutura de uma tabela já existente. Ele é muito usado quando o sistema evolui e novas necessidades aparecem. Date (2004) destaca que o esquema de um banco representa uma definição formal dos dados; modificá-lo exige cuidado porque aplicações, consultas e relatórios podem depender da estrutura anterior.
Excluir colunas
Suponha que a equipe decidiu não armazenar mais a nacionalidade dos autores, pois esse dado não será usado no sistema. A coluna pode ser removida com DROP COLUMN.
ALTER TABLE autores
DROP COLUMN nacionalidade;Atenção neste procedimento! Excluir uma coluna remove sua definição e também os dados armazenados nela. Em um banco real, esse tipo de operação deve ser precedido de backup e análise de impacto.
Inserir uma chave primária depois da criação da tabela
Agora criaremos uma tabela de categorias sem chave primária inicialmente, para depois alterá-la.
CREATE TABLE categorias (
id_categoria INT,
nome_categoria VARCHAR(80) NOT NULL
);Em seguida, definimos id_categoria como chave primária.
ALTER TABLE categorias
ADD PRIMARY KEY (id_categoria);Como uma chave primária precisa identificar registros de forma única e não nula, o ideal seria criar a coluna já com AUTO_INCREMENT. Podemos corrigir isso alterando a coluna.
ALTER TABLE categorias
MODIFY COLUMN id_categoria INT AUTO_INCREMENT;Excluir uma chave primária
Se fosse necessário remover a chave primária da tabela categorias, usaríamos:
ALTER TABLE categorias
DROP PRIMARY KEY;Essa operação deve ser feita com cuidado, pois a chave primária pode estar sendo referenciada por chaves estrangeiras em outras tabelas. Em bancos relacionais, a remoção de uma chave pode afetar a integridade de relacionamentos entre entidades.
Inserir uma chave estrangeira
Vamos adicionar a coluna id_categoria à tabela livros para indicar a categoria de cada livro.
ALTER TABLE livros
ADD COLUMN id_categoria INT;Agora, criamos a chave estrangeira ligando livros a categorias.
ALTER TABLE livros
ADD CONSTRAINT fk_livros_categorias
FOREIGN KEY (id_categoria)
REFERENCES categorias(id_categoria);A restrição FOREIGN KEY formaliza o relacionamento entre as tabelas. Na prática, ela informa que o valor registrado em livros.id_categoria deve existir em categorias.id_categoria.
Excluir uma chave estrangeira
Se a biblioteca decidir remover a relação entre livros e categorias, primeiro é necessário remover a chave estrangeira.
ALTER TABLE livros
DROP FOREIGN KEY fk_livros_categorias;Depois, se a coluna também não for mais necessária, ela pode ser excluída.
ALTER TABLE livros
DROP COLUMN id_categoria;É importante distinguir a remoção da restrição e a remoção da coluna. DROP FOREIGN KEY remove a regra de relacionamento. DROP COLUMN remove o campo da tabela.
Renomear tabelas
A equipe decidiu que o nome livros é genérico demais. Como o sistema também poderá registrar revistas e apostilas no futuro, a tabela será renomeada para acervo.
RENAME TABLE livros TO acervo;Outra forma possível é usar ALTER TABLE.
ALTER TABLE acervo
RENAME TO itens_acervo;Renomear tabelas pode quebrar consultas, relatórios e códigos da aplicação que ainda usam o nome antigo. Por isso, a alteração deve ser acompanhada de revisão no backend, nos scripts SQL e na documentação do sistema.
Renomear colunas
A coluna titulo pode ser renomeada para titulo_item, deixando mais claro que a tabela agora representa itens variados do acervo.
ALTER TABLE itens_acervo
RENAME COLUMN titulo TO titulo_item;Também podemos renomear a coluna genero para tipo_genero.
ALTER TABLE itens_acervo
RENAME COLUMN genero TO tipo_genero;Renomear colunas melhora a semântica do modelo, mas também exige atenção. Se uma aplicação executa SELECT titulo FROM itens_acervo, essa consulta deixará de funcionar após a alteração.
Renomear chaves
No MySQL, nomes de restrições, como chaves estrangeiras, não são sempre renomeados diretamente por um único comando simples. Uma estratégia segura é remover a chave estrangeira antiga e recriá-la com novo nome.
Suponha que ainda exista a chave estrangeira fk_livros_autores, herdada do nome antigo da tabela. Podemos removê-la e recriá-la com um nome mais adequado.
ALTER TABLE itens_acervo
DROP FOREIGN KEY fk_livros_autores;Agora recriamos a chave com um nome coerente com a tabela atual.
ALTER TABLE itens_acervo
ADD CONSTRAINT fk_itens_acervo_autores
FOREIGN KEY (id_autor)
REFERENCES autores(id_autor);Esse procedimento mostra uma prática importante para a vida estudantil e profissional, que é a importância dos nomes. Nomes de restrições devem ser claros e representativos do problema. Em projetos maiores, nomes como fk_itens_acervo_autores facilitam manutenção, depuração e leitura do modelo.
Alterar tipos de colunas
A biblioteca percebeu que o título de alguns itens pode ter mais de 150 caracteres. Para evitar cortes, vamos ampliar o campo para 250 caracteres.
ALTER TABLE itens_acervo
MODIFY COLUMN titulo_item VARCHAR(250) NOT NULL;Também podemos alterar ano_publicacao para SMALLINT, já que anos cabem em um intervalo menor que INT.
ALTER TABLE itens_acervo
MODIFY COLUMN ano_publicacao SMALLINT;Alterar tipos de colunas exige atenção aos dados já existentes. Se uma coluna com textos longos for reduzida de VARCHAR(250) para VARCHAR(50), pode haver perda de informação ou erro na execução. A alteração de tipos deve considerar domínio, volume de dados, índices e regras da aplicação.
Criar tabela de empréstimos
Agora a biblioteca deseja controlar empréstimos. Vamos criar uma tabela chamada emprestimos.
CREATE TABLE emprestimos (
id_emprestimo INT AUTO_INCREMENT,
id_item INT NOT NULL,
nome_leitor VARCHAR(120) NOT NULL,
data_emprestimo DATE NOT NULL,
data_prevista_devolucao DATE,
PRIMARY KEY (id_emprestimo),
CONSTRAINT fk_emprestimos_itens
FOREIGN KEY (id_item)
REFERENCES itens_acervo(id_livro)
);Essa tabela registra qual item foi emprestado, para quem e em qual data. Entretanto, há um problema conceitual: a tabela itens_acervo ainda possui a coluna id_livro, embora a tabela tenha sido renomeada. Para manter consistência semântica, vamos renomear a coluna.
ALTER TABLE itens_acervo
RENAME COLUMN id_livro TO id_item;Como essa coluna era chave primária e podia estar referenciada, em alguns ambientes pode ser necessário remover e recriar restrições antes da alteração. Para evitar erro, uma sequência mais controlada seria remover a chave estrangeira dependente, renomear a coluna e recriar a restrição.
ALTER TABLE emprestimos
DROP FOREIGN KEY fk_emprestimos_itens;
ALTER TABLE itens_acervo
RENAME COLUMN id_livro TO id_item;
ALTER TABLE emprestimos
ADD CONSTRAINT fk_emprestimos_itens
FOREIGN KEY (id_item)
REFERENCES itens_acervo(id_item);Esse exemplo mostra uma situação comum em bancos reais: uma alteração aparentemente simples pode ter impacto em outras tabelas, pois bancos relacionais são estruturas interdependentes.
Excluir tabelas
Depois de uma revisão do projeto, a equipe decidiu que a tabela categorias não será mais usada. Como ela não possui mais chave estrangeira ativa ligada a itens_acervo, pode ser removida.
DROP TABLE categorias;Também poderíamos remover a tabela de empréstimos, se o módulo fosse cancelado.
DROP TABLE emprestimos;O comando DROP TABLE remove a tabela, sua estrutura e seus dados. Em geral, ele é irreversível sem backup. Em atividades didáticas, ele é útil para testar comandos. Em ambientes de produção, deve ser tratado como operação de alto risco.
Excluir banco de dados
Agora, digamos que o projeto não será mais desenvolvido. Sendo assim, o banco que construímos não precisa mais existir. Logo, podemos excluir o banco inteiro.
DROP DATABASE biblioteca_vila_digital;Esse comando remove o banco e todos os seus objetos internos. A exclusão de banco deve ser feita somente quando houver certeza de que os dados não são mais necessários ou quando existir backup confiável.
Conclusão
Os comandos DDL formam a base estrutural da SQL. Com CREATE, criamos bancos, tabelas e restrições. Com ALTER, adaptamos estruturas existentes às novas necessidades do sistema. Com DROP, removemos objetos que deixaram de ser necessários ou que foram criados apenas para teste.
Para estudantes de computação, aprender DDL é um passo essencial para compreender a arquitetura de sistemas baseados em dados. Um banco bem definido reduz inconsistências, facilita consultas, melhora a manutenção e torna o sistema mais confiável. Como defendem Elmasri e Navathe (2011), o projeto de banco de dados deve representar corretamente o minimundo da aplicação, isto é, a parte da realidade que o sistema pretende organizar. Nesse sentido, comandos DDL são o começo pelo qual esse minimundo começa a ganhar forma técnica dentro do SGBD.
Obrigado pela leitura e bons estudos!
Referências
CHAMBERLIN, Donald D.; BOYCE, Raymond F. SEQUEL: a structured English query language. Proceedings of the 1974 ACM SIGFIDET Workshop on Data Description, Access and Control. New York: ACM, 1974.
CODD, Edgar F. A relational model of data for large shared data banks. Communications of the ACM, New York, v. 13, n. 6, p. 377-387, 1970.
DATE, C. J. Introdução a sistemas de bancos de dados. 8. ed. Rio de Janeiro: Elsevier, 2004.
ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 6. ed. São Paulo: Pearson Addison Wesley, 2011.
ORACLE. MySQL 8.4 Reference Manual. Redwood Shores: Oracle, 2026. Disponível em: <https://downloads.mysql.com/docs/refman-8.4-en.pdf>. Acesso em: 13 jun. 2026.
ORACLE. MySQL Workbench Manual. Redwood Shores: Oracle, 2026. Disponível em: <https://docs.oracle.com/cd/E17952_01/workbench-en/>. Acesso em: 13 jun. 2026.
PHPMYADMIN. phpMyAdmin documentation. The phpMyAdmin Project, 2026. Disponível em: <https://www.phpmyadmin.net/docs/>. Acesso em: 13 jun. 2026.
SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Sistema de banco de dados. 7. ed. Rio de Janeiro: LTC, 2020.


