Criando Tabelas
CREATE TABLE -- a base de tudo
O comando CREATE TABLE define a estrutura de uma tabela: quais colunas ela tem, o tipo de cada uma e as restricoes (constraints).
CREATE TABLE alunos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
idade INT,
ativo BOOLEAN DEFAULT TRUE,
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Vamos entender cada parte.
PRIMARY KEY -- identidade unica
A chave primaria identifica cada registro de forma unica. Normalmente usamos uma coluna id com AUTO_INCREMENT:
id INT AUTO_INCREMENT PRIMARY KEY
Isso significa:
INT-- tipo numerico inteiroAUTO_INCREMENT-- o banco gera o valor automaticamente (1, 2, 3...)PRIMARY KEY-- e o identificador unico da tabela
INSERT INTO alunos (nome, email) VALUES ('Ana', '[email protected]');
-- → id = 1 (automatico)
INSERT INTO alunos (nome, email) VALUES ('Carlos', '[email protected]');
-- → id = 2 (automatico)
NOT NULL -- campo obrigatorio
NOT NULL impede que a coluna aceite valores vazios.
nome VARCHAR(100) NOT NULL
Se voce tentar inserir sem o nome:
INSERT INTO alunos (email) VALUES ('[email protected]');
-- → ERRO! A coluna 'nome' nao pode ser NULL
Quando usar:
- Use NOT NULL em campos obrigatorios: nome, email, senha
- Deixe sem NOT NULL em campos opcionais: telefone, bio, foto
UNIQUE -- sem repeticoes
UNIQUE garante que nenhum valor se repita naquela coluna.
email VARCHAR(255) UNIQUE NOT NULL
INSERT INTO alunos (nome, email) VALUES ('Ana', '[email protected]');
-- → OK!
INSERT INTO alunos (nome, email) VALUES ('Ana Maria', '[email protected]');
-- → ERRO! Duplicate entry '[email protected]' for key 'email'
DEFAULT -- valor padrao
DEFAULT define um valor automatico quando nenhum e informado.
ativo BOOLEAN DEFAULT TRUE,
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
INSERT INTO alunos (nome, email) VALUES ('Ana', '[email protected]');
-- → ativo = TRUE (automatico)
-- → criado_em = '2024-03-15 14:30:00' (automatico)
Exemplos uteis de DEFAULT:
role VARCHAR(20) DEFAULT 'aluno',
tentativas INT DEFAULT 0,
pais VARCHAR(50) DEFAULT 'Brasil'
Combinando Constraints
Voce pode combinar varias constraints numa mesma coluna:
email VARCHAR(255) UNIQUE NOT NULL
-- Obrigatorio + sem repeticoes
nome VARCHAR(100) NOT NULL DEFAULT 'Sem nome'
-- Obrigatorio + valor padrao (se o campo for omitido)
Exemplo Completo -- Sistema de Escola
Vamos criar um mini sistema com 3 tabelas relacionadas:
CREATE DATABASE escola;
USE escola;
-- Tabela de alunos
CREATE TABLE alunos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
data_nascimento DATE,
ativo BOOLEAN DEFAULT TRUE,
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabela de cursos
CREATE TABLE cursos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
descricao TEXT,
carga_horaria INT NOT NULL,
preco DECIMAL(10, 2) NOT NULL
);
-- Tabela de matriculas (conecta alunos e cursos)
CREATE TABLE matriculas (
id INT AUTO_INCREMENT PRIMARY KEY,
aluno_id INT NOT NULL,
curso_id INT NOT NULL,
data_matricula DATE DEFAULT (CURRENT_DATE),
status VARCHAR(20) DEFAULT 'ativa',
FOREIGN KEY (aluno_id) REFERENCES alunos(id),
FOREIGN KEY (curso_id) REFERENCES cursos(id)
);
A tabela matriculas usa FOREIGN KEY para se conectar as tabelas alunos e cursos:
alunos.id ←── matriculas.aluno_id
cursos.id ←── matriculas.curso_id
Verificando a Estrutura
Depois de criar, voce pode ver a estrutura da tabela:
DESCRIBE alunos;
-- → Mostra todas as colunas, tipos e constraints
SHOW CREATE TABLE alunos;
-- → Mostra o comando CREATE TABLE completo
E para listar todas as tabelas do banco:
SHOW TABLES;
-- → alunos, cursos, matriculas
Alterando Tabelas (ALTER TABLE)
Criou a tabela e esqueceu uma coluna? Use ALTER TABLE:
-- Adicionar coluna
ALTER TABLE alunos ADD telefone VARCHAR(20);
-- Remover coluna
ALTER TABLE alunos DROP COLUMN telefone;
-- Mudar o tipo de uma coluna
ALTER TABLE alunos MODIFY nome VARCHAR(200) NOT NULL;
-- Renomear coluna
ALTER TABLE alunos RENAME COLUMN nome TO nome_completo;
Deletando Tabelas (DROP TABLE)
DROP TABLE matriculas;
-- → Apaga a tabela e TODOS os dados
DROP TABLE IF EXISTS matriculas;
-- → So apaga se existir (evita erro)
Exercicios
-
Crie uma tabela
professorescom as colunas: id (PK), nome (obrigatorio), email (unico e obrigatorio), especialidade, salario e data_contratacao. -
Crie uma tabela
turmascom: id (PK), nome, professor_id (FK para professores), horario e sala. Use constraints adequadas. -
Adicione uma coluna
telefonena tabelaprofessoresusandoALTER TABLE. -
Tente inserir dois professores com o mesmo email e observe o erro.
-
Crie um mini sistema de biblioteca com as tabelas:
livros,leitoreseemprestimos. Defina chaves primarias, estrangeiras e constraints.
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.