Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Modulo 1: Fundamentos

Criando Tabelas

CREATE TABLE, PRIMARY KEY, NOT NULL e constraints

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 inteiro
  • AUTO_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

  1. Crie uma tabela professores com as colunas: id (PK), nome (obrigatorio), email (unico e obrigatorio), especialidade, salario e data_contratacao.

  2. Crie uma tabela turmas com: id (PK), nome, professor_id (FK para professores), horario e sala. Use constraints adequadas.

  3. Adicione uma coluna telefone na tabela professores usando ALTER TABLE.

  4. Tente inserir dois professores com o mesmo email e observe o erro.

  5. Crie um mini sistema de biblioteca com as tabelas: livros, leitores e emprestimos. 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.

Pergunta 1 de 5
Qual restrição garante que a coluna nunca fique vazia?