12-Tipos de Dados, Constraints, ALTER e DROP TABLE
Materiais desta aula
12 — Tipos de Dados, Constraints, ALTER e DROP TABLE
1. Aprofundando os tipos de dados
No Encontro 11 vimos só o essencial (INT, VARCHAR, DATE, DECIMAL) para conseguir escrever um CREATE TABLE. Hoje vamos conhecer mais opções e, principalmente, aprender quando usar cada uma.
Tipos numéricos
| Tipo | Faixa de valores (aproximada) | Tamanho | Quando usar |
|---|---|---|---|
| TINYINT | -128 a 127 | 1 byte | Valores bem pequenos (ex.: idade, quantidade de estrelas de avaliação) |
| SMALLINT | -32.768 a 32.767 | 2 bytes | Valores pequenos/médios (ex.: ano de fabricação) |
| INT | ±2,1 bilhões | 4 bytes | O padrão para a maioria dos casos (IDs, matrículas, quantidades) |
| BIGINT | Números enormes | 8 bytes | Sistemas com bilhões de registros (ex.: IDs de rede social gigante) |
| DECIMAL(p,q) | Exato, com casas decimais | Varia | Dinheiro e valores que precisam ser exatos — nunca usar FLOAT para preço |
| FLOAT / DOUBLE | Aproximado, com casas decimais | Varia | Cálculos científicos onde uma pequena imprecisão não importa |
Critério de escolha: não gaste espaço à toa (um campo "quantidade de estrelas" de 1 a 5 não precisa de INT), mas na dúvida, INT é uma escolha segura para a maioria dos casos do dia a dia.
Tipos de texto
| Tipo | Como funciona | Quando usar |
|---|---|---|
| CHAR(n) | Tamanho fixo — sempre ocupa n caracteres | Códigos de tamanho sempre igual (ex.: sigla de estado, "UF" sempre com 2 letras) |
| VARCHAR(n) | Tamanho variável, até n caracteres | A maioria dos casos: nomes, endereços, títulos |
| TEXT | Texto longo, sem limite prático | Descrições, comentários, textos grandes |
Cuidado: CPF e telefone não são INT
Um erro clássico de quem está começando: como CPF e telefone só têm dígitos, parece natural usar INT. Não use. Três motivos:
- Perde zeros à esquerda — "00123456789" guardado como INT vira
123456789, um valor diferente do original. - Pode estourar o tamanho do INT — CPF tem 11 dígitos, e o INT do MySQL só aguenta até aproximadamente 10 dígitos (±2,1 bilhões).
- Não é uma quantidade — você nunca vai somar, calcular média ou fazer conta com um CPF ou telefone. Se não faz sentido matemático, não é um número "de verdade" para o banco.
O certo é usar CHAR(11) (tamanho sempre igual) ou VARCHAR para esses casos — trate como texto, mesmo que só tenha dígitos.
Tipos de data e hora
| Tipo | Guarda | Exemplo |
|---|---|---|
| DATE | Só a data | 2026-09-01 |
| TIME | Só a hora | 14:30:00 |
| DATETIME | Data + hora | 2026-09-01 14:30:00 |
| TIMESTAMP | Parecido com DATETIME, mas ajusta fuso horário automaticamente e tem faixa de datas menor (até 2038) | Registro de "quando isso foi criado/alterado" |
2. Constraints: NOT NULL e UNIQUE
Já usamos PRIMARY KEY e FOREIGN KEY. Hoje formalizamos mais duas restrições (constraints) no CREATE TABLE:
- NOT NULL — impede que a coluna fique vazia. Por padrão, uma coluna pode ficar sem valor (NULL); com NOT NULL, o banco exige que sempre tenha algo.
- UNIQUE — impede valores repetidos naquela coluna. Já vimos essa ideia lá no Encontro 8 (relacionamento 1:1) — agora vemos a sintaxe formal.
sql
CREATE TABLE aluno (
matricula INT NOT NULL,
nome VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
PRIMARY KEY (matricula)
);
Nesse exemplo: matricula e nome são obrigatórios (NOT NULL); email pode ficar vazio, mas se for preenchido, não pode se repetir entre alunos (UNIQUE).
3. ALTER TABLE — alterando uma tabela já criada
-- Adicionar uma coluna nova
ALTER TABLE aluno ADD COLUMN telefone VARCHAR(20);
-- Remover uma coluna
ALTER TABLE aluno DROP COLUMN telefone;
-- Modificar o tipo/tamanho de uma coluna
ALTER TABLE aluno MODIFY COLUMN nome VARCHAR(150);
4. DROP TABLE — apagando uma tabela inteira
DROP TABLE nome_da_tabela;
⚠️ Cuidado: DROP TABLE apaga a tabela e todos os dados dentro dela, sem confirmação e sem volta. Sempre ter certeza (e, idealmente, um backup) antes de rodar.
5. Prévia do próximo encontro
No Encontro 13, vamos aprender sobre índices: o que são, para que servem, e como criá-los para deixar buscas mais rápidas.
Vídeos sobre o assunto
- Curso MySQL — Tipos de Dados — CursoemVideo, mesma aula do Encontro 11, que também apresenta os tipos primitivos do MySQL.
Para se aprofundar
- MySQL Data Types — w3resource — referência completa (em inglês) de todos os tipos de dado do MySQL.