[PIQUETE] DDL — Data Definition Language

DDL - Linguagem de Definição de Dados | Caderno de TI

DDL — Data Definition Language

Linguagem de Definição de Dados: estruturando o banco do zero

Banco de Dados MySQL SQL Técnico em Informática

O que é DDL?

DDL (Data Definition Language) é o subconjunto da linguagem SQL responsável por definir e gerenciar a estrutura do banco de dados. Com DDL você cria bancos, tabelas, altera colunas, define regras de integridade e remove objetos. Diferente da DML, que manipula dados, a DDL manipula a estrutura onde esses dados vivem.

Posição da DDL na família SQL:

DDL ← Foco
Estrutura
CREATE · ALTER · DROP
DML
Dados
INSERT · UPDATE · DELETE
DQL
Consulta
SELECT
DCL
Controle
GRANT · REVOKE

Comandos DDL

🏗️
CREATE
Cria banco ou tabela
✏️
ALTER
Modifica a estrutura
🗑️
DROP
Remove permanentemente
TRUNCATE
Esvazia a tabela
🔑
CONSTRAINTS
Regras de integridade

CREATE DATABASE & DROP DATABASE

CREATE DATABASE

Antes de criar tabelas, é preciso criar o banco de dados — o contêiner que agrupará todas as suas tabelas.

Criar e selecionar o banco
-- 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;
DROP DATABASE

Remove o banco de dados completamente, incluindo todas as suas tabelas e dados. Irreversível.

Remover banco de dados
-- Remove o banco (cuidado!)
DROP DATABASE escola;

-- Remove somente se existir (evita erro)
DROP DATABASE IF EXISTS escola;
DROP DATABASE é irreversível! Apaga o banco inteiro com todas as tabelas e dados. Não há ROLLBACK possível. Sempre faça backup antes.

CREATE TABLE — Criando Tabelas

CREATE TABLE

Define a estrutura de uma nova tabela: nome, colunas, tipos de dados e restrições (constraints).

Sintaxe

Estrutura básica
CREATE TABLE nome_tabela (
  coluna1  tipo  constraint,
  coluna2  tipo  constraint,
  ...
);

Exemplo — Tabela de Cursos

CREATE TABLE 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
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)
);
Resultado
Query OK, 0 rows affected
Dica — Tipos de dados comuns no MySQL:
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

ALTER TABLE

Modifica a estrutura de uma tabela existente: adiciona, altera ou remove colunas e constraints, sem precisar recriar a tabela.

ADD COLUMN — adicionar coluna

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

Modificar coluna
-- 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

Renomear coluna (MySQL 8.0+)
ALTER TABLE alunos
  RENAME COLUMN telefone TO celular;

DROP COLUMN — remover coluna

Remover coluna
ALTER TABLE alunos
  DROP COLUMN celular;

ADD CONSTRAINT — adicionar restrição depois

Adicionar FK após criação
-- Adiciona chave estrangeira em tabela existente
ALTER TABLE alunos
  ADD CONSTRAINT fk_aluno_curso
  FOREIGN KEY (id_curso) REFERENCES cursos(id);
Atenção com MODIFY: ao usar MODIFY COLUMN, é necessário reescrever o tipo e todas as constraints da coluna — as que não forem informadas serão removidas.

DROP TABLE — Removendo Tabelas

DROP TABLE

Remove a tabela permanentemente do banco de dados, incluindo toda a sua estrutura e todos os dados armazenados.

Remover tabelas
-- 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;
DROP TABLE é irreversível! Apaga estrutura e dados. Se houver tabelas com FOREIGN KEY apontando para ela, o DROP falhará — remova as dependências antes.

TRUNCATE TABLE — Esvaziando a Tabela

TRUNCATE TABLE

Remove todos os dados da tabela de forma rápida, mas preserva sua estrutura (colunas, tipos, constraints). Reinicia o contador AUTO_INCREMENT.

Esvaziar tabela
-- Apaga todos os registros e reinicia o AUTO_INCREMENT
TRUNCATE TABLE alunos;
Efeito
Estrutura preservada | Dados removidos | AUTO_INCREMENT reiniciado para 1
TRUNCATE é DDL, não DML! Apesar de remover dados como o DELETE, o TRUNCATE é classificado como DDL porque atua sobre a estrutura do armazenamento. Por isso não pode ser desfeito com ROLLBACK e não dispara triggers.

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

Postagens mais visitadas deste blog

Introdução aos Sistemas de Gerenciamento de Banco de Dados

Introdução ao HTML, CSS e JavaScript - Guia para Iniciantes

Introdução ao Excel