[PIQUETE] DDL — Data Definition Language
DDL — Data Definition Language
Linguagem de Definição de Dados: estruturando o banco do zero
O que é DDL?
Posição da DDL na família SQL:
Comandos DDL
CREATE DATABASE & DROP DATABASE
Antes de criar tabelas, é preciso criar o banco de dados — o contêiner que agrupará todas as suas tabelas.
-- Cria o banco de dados CREATE DATABASE escola; -- Cria somente se ainda não existir (evita erro) CREATE DATABASE IF NOT EXISTS escola; -- Seleciona o banco para uso USE escola; -- Lista todos os bancos existentes SHOW DATABASES;
Remove o banco de dados completamente, incluindo todas as suas tabelas e dados. Irreversível.
-- Remove o banco (cuidado!) DROP DATABASE escola; -- Remove somente se existir (evita erro) DROP DATABASE IF EXISTS escola;
CREATE TABLE — Criando Tabelas
Define a estrutura de uma nova tabela: nome, colunas, tipos de dados e restrições (constraints).
Sintaxe
CREATE TABLE nome_tabela ( coluna1 tipo constraint, coluna2 tipo constraint, ... );
Exemplo — Tabela de Cursos
CREATE TABLE cursos ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, duracao INT DEFAULT 2 -- duração padrão: 2 anos );
Exemplo — Tabela de Alunos (com Chave Estrangeira)
CREATE TABLE alunos ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE, id_curso INT, FOREIGN KEY (id_curso) REFERENCES cursos(id) );
INT — números inteiros |
VARCHAR(n) — texto variável até n caracteres |
DECIMAL(p,s) — número decimal com precisão |
DATE — data |
BOOLEAN — verdadeiro/falso
Constraints — Regras de Integridade
Constraints (restrições) são regras definidas nas colunas para garantir a integridade dos dados. Elas impedem que dados inválidos sejam inseridos na tabela.
PRIMARY KEY (PK)
Identifica cada linha de forma única. Não permite valores duplicados nem NULL. Toda tabela deve ter uma.
id INT PRIMARY KEY, -- ou combinada com AUTO_INCREMENT: id INT AUTO_INCREMENT PRIMARY KEY
FOREIGN KEY (FK)
Cria vínculo entre tabelas. O valor da coluna deve existir na tabela referenciada (integridade referencial).
FOREIGN KEY (id_curso) REFERENCES cursos(id)
NOT NULL
Impede que a coluna aceite valores nulos. O campo se torna obrigatório em todo INSERT.
nome VARCHAR(100) NOT NULL
UNIQUE
Garante que todos os valores da coluna sejam únicos. Diferente da PK, aceita um único valor NULL.
email VARCHAR(100) UNIQUE
DEFAULT
Define um valor padrão para a coluna quando nenhum valor é informado no INSERT.
duracao INT DEFAULT 2, ativo BOOLEAN DEFAULT TRUE
CHECK
Valida se o valor inserido satisfaz uma condição lógica. Disponível no MySQL 8.0+.
nota DECIMAL(4,2) CHECK (nota >= 0 AND nota <= 10)
ALTER TABLE — Modificando a Estrutura
Modifica a estrutura de uma tabela existente: adiciona, altera ou remove colunas e constraints, sem precisar recriar a tabela.
ADD COLUMN — adicionar coluna
-- Adiciona coluna "telefone" à tabela alunos ALTER TABLE alunos ADD COLUMN telefone VARCHAR(20); -- Adiciona em posição específica (após "nome") ALTER TABLE alunos ADD COLUMN telefone VARCHAR(20) AFTER nome;
MODIFY COLUMN — alterar tipo ou constraint
-- Aumenta o tamanho do campo nome ALTER TABLE alunos MODIFY COLUMN nome VARCHAR(150) NOT NULL; -- Torna email obrigatório ALTER TABLE alunos MODIFY COLUMN email VARCHAR(100) NOT NULL UNIQUE;
RENAME COLUMN — renomear coluna
ALTER TABLE alunos RENAME COLUMN telefone TO celular;
DROP COLUMN — remover coluna
ALTER TABLE alunos DROP COLUMN celular;
ADD CONSTRAINT — adicionar restrição depois
-- Adiciona chave estrangeira em tabela existente ALTER TABLE alunos ADD CONSTRAINT fk_aluno_curso FOREIGN KEY (id_curso) REFERENCES cursos(id);
DROP TABLE — Removendo Tabelas
Remove a tabela permanentemente do banco de dados, incluindo toda a sua estrutura e todos os dados armazenados.
-- Remove a tabela definitivamente DROP TABLE alunos; -- Remove somente se a tabela existir (sem erro se não existir) DROP TABLE IF EXISTS alunos; -- Remove múltiplas tabelas de uma vez (ordem importa com FK!) DROP TABLE IF EXISTS alunos, cursos;
TRUNCATE TABLE — Esvaziando a Tabela
Remove todos os dados da tabela de forma rápida, mas preserva sua estrutura (colunas, tipos, constraints). Reinicia o contador AUTO_INCREMENT.
-- Apaga todos os registros e reinicia o AUTO_INCREMENT TRUNCATE TABLE alunos;
Resumo Comparativo
| Comando | Age sobre | O que faz | Reversível? | Mantém estrutura? |
|---|---|---|---|---|
| CREATE DATABASE | Banco | Cria o banco | DROP para desfazer | — |
| CREATE TABLE | Tabela | Cria a tabela e suas colunas | DROP para desfazer | Cria nova |
| ALTER TABLE | Tabela | Modifica colunas / constraints | Parcialmente | Sim |
| DROP TABLE | Tabela | Remove tudo (estrutura + dados) | Não | Não |
| DROP DATABASE | Banco | Remove o banco inteiro | Não | Não |
| TRUNCATE TABLE | Tabela | Apaga dados, reinicia AUTO_INCREMENT | Não (DDL) | Sim |
DDL vs DML — Diferenças Essenciais
DDL
- ✔ Age na estrutura
- ✔ Comandos: CREATE, ALTER, DROP, TRUNCATE
- ✔ Alterações automáticas — não usa COMMIT
- ✔ Não pode ser desfeito com ROLLBACK
- ✔ Modifica tabelas, bancos, constraints
DML
- ✔ Age nos dados
- ✔ Comandos: INSERT, UPDATE, DELETE
- ✔ Participa de transações
- ✔ Pode ser desfeito com ROLLBACK
- ✔ Modifica linhas das tabelas
Boas Práticas
Use IF NOT EXISTS / IF EXISTS
Sempre use essas cláusulas no CREATE e DROP para evitar erros caso o objeto já exista ou não exista.
Defina sempre uma PK
Toda tabela deve ter uma PRIMARY KEY. Prefira usar INT AUTO_INCREMENT para simplicidade e desempenho.
Backup antes de DROP
Antes de qualquer DROP TABLE ou DROP DATABASE, gere um backup completo com mysqldump.
Planeje antes de criar
Use ferramentas como BrModelo ou MySQL Workbench para projetar o MER antes de escrever os comandos DDL.
Comentários
Postar um comentário
Ficou com alguma dúvida? Quer compartilhar sua experiência? Tem uma sugestão de
melhoria? Seu comentário é muito importante!