Tipos de Dados
Por que tipos de dados importam?
Quando voce cria uma tabela, precisa dizer ao banco qual tipo de dado cada coluna vai armazenar. Isso serve para:
- Economizar espaco: um INT ocupa menos espaco que um TEXT
- Validar dados: o banco rejeita texto numa coluna INT
- Melhorar performance: buscas em colunas tipadas corretamente sao mais rapidas
Tipos Numericos
INT -- numeros inteiros
Para qualquer numero sem casa decimal: idade, quantidade, ano.
CREATE TABLE produtos (
id INT,
quantidade_estoque INT,
ano_lancamento INT
);
Variacoes de tamanho:
| Tipo | Faixa | Bytes |
|---|---|---|
| TINYINT | -128 a 127 | 1 |
| SMALLINT | -32.768 a 32.767 | 2 |
| INT | -2 bilhoes a 2 bilhoes | 4 |
| BIGINT | -9 quintilhoes a 9 quintilhoes | 8 |
DECIMAL -- numeros com casas decimais
Para valores que precisam de precisao exata, como dinheiro.
CREATE TABLE produtos (
preco DECIMAL(10, 2)
-- 10 digitos no total, 2 depois da virgula
-- Ex: 12345678.99
);
A sintaxe e DECIMAL(precisao, escala):
- Precisao: total de digitos
- Escala: digitos depois do ponto decimal
DECIMAL(5, 2) -- aceita de -999.99 a 999.99
DECIMAL(10, 2) -- aceita de -99999999.99 a 99999999.99
Tipos de Texto
VARCHAR -- texto com limite
Para textos curtos e de tamanho previsivel: nome, email, telefone.
CREATE TABLE alunos (
nome VARCHAR(100), -- ate 100 caracteres
email VARCHAR(255), -- ate 255 caracteres
telefone VARCHAR(20) -- ate 20 caracteres
);
O numero entre parenteses e o maximo de caracteres. Se o aluno tiver nome com 10 letras, o banco so armazena 10 (nao desperidca espaco).
TEXT -- texto longo
Para textos grandes sem limite pratico: descricoes, biografias, conteudo de artigos.
CREATE TABLE postagens (
titulo VARCHAR(200),
conteudo TEXT -- texto longo, sem limite pratico
);
| Tipo | Limite | Quando usar |
|---|---|---|
| VARCHAR(n) | ate 65.535 caracteres | Nomes, emails, telefones |
| TEXT | ~65 mil caracteres | Descricoes, comentarios |
| MEDIUMTEXT | ~16 milhoes de caracteres | Artigos, conteudo grande |
| LONGTEXT | ~4 bilhoes de caracteres | Raramente necessario |
BOOLEAN -- verdadeiro ou falso
Para valores binarios: ativo/inativo, sim/nao, publicado/rascunho.
CREATE TABLE usuarios (
nome VARCHAR(100),
ativo BOOLEAN -- TRUE ou FALSE
);
INSERT INTO usuarios (nome, ativo) VALUES ('Ana', TRUE);
INSERT INTO usuarios (nome, ativo) VALUES ('Carlos', FALSE);
SELECT * FROM usuarios WHERE ativo = TRUE;
-- → Retorna apenas Ana
Tipos de Data e Hora
DATE -- apenas data
CREATE TABLE eventos (
data_evento DATE -- formato: 'YYYY-MM-DD'
);
INSERT INTO eventos (data_evento) VALUES ('2024-03-15');
TIMESTAMP -- data e hora
CREATE TABLE logs (
acao VARCHAR(100),
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-- Preenche automaticamente com a data/hora atual
);
INSERT INTO logs (acao) VALUES ('Usuario logou');
-- criado_em → '2024-03-15 14:30:00' (automatico)
| Tipo | Formato | Exemplo |
|---|---|---|
| DATE | YYYY-MM-DD | 2024-03-15 |
| TIME | HH:MM:SS | 14:30:00 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 2024-03-15 14:30:00 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 2024-03-15 14:30:00 |
| YEAR | YYYY | 2024 |
Tabela Resumo -- Quando Usar Cada Tipo
| Dado | Tipo Recomendado | Exemplo |
|---|---|---|
| ID / contador | INT (ou BIGINT) | 1, 2, 3... |
| Nome / email | VARCHAR(255) | "Ana Silva" |
| Descricao longa | TEXT | Biografia do aluno |
| Preco / salario | DECIMAL(10,2) | 1499.90 |
| Idade / quantidade | INT | 25 |
| Ativo / publicado | BOOLEAN | TRUE / FALSE |
| Data de nascimento | DATE | 2000-05-20 |
| Data de criacao | TIMESTAMP | 2024-03-15 14:30:00 |
Exercicios
-
Para cada campo abaixo, escolha o tipo de dado mais adequado e justifique:
- CPF
- Salario mensal
- Numero de filhos
- Biografia do funcionario
- Data de admissao
- Status ativo/inativo
-
Crie uma tabela
funcionarioscom pelo menos 6 colunas usando tipos diferentes (INT, VARCHAR, DECIMAL, BOOLEAN, DATE, TIMESTAMP). -
Pesquise: qual a diferenca entre CHAR(10) e VARCHAR(10)?
-
Por que nao devemos usar FLOAT para armazenar valores monetarios? Faca um teste: calcule
0.1 + 0.2em alguma linguagem de programacao e veja o resultado.
Referencias
Testa o que você leu
5 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.