Ficha 01 · DDL e DML
- Criar tabelas com restrições
- Inserir dados
- Actualizar com WHERE
- Apagar com cuidado
Parte I · DDL
Exercício 1 · Criar tabela (15 pts)
Escreve CREATE TABLE Aluno com:
- id PK auto-increment.
- numero único, 10 caracteres, não nulo.
- nome 150 caracteres, não nulo.
- email único, 150 caracteres.
- idade CHECK >= 0 e <= 25.
- data_inscricao data com default hoje.
Exercício 2 · ALTER (15 pts)
Para a tabela do exercício 1, escreve comandos para:
a) Adicionar coluna telefone VARCHAR(20).
b) Mudar nome para 200 caracteres.
c) Adicionar índice no email.
d) Adicionar FK para Turma(id) na coluna turma_id (criar coluna primeiro).
Parte II · INSERT
Exercício 3 · Inserir dados (15 pts)
Considerando a tabela Aluno, escreve:
a) INSERT de 1 aluno.
b) INSERT de 3 alunos numa única instrução.
c) INSERT que copia todos os alunos de AlunoArquivo para Aluno.
Exercício 4 · Detectar erro (10 pts)
Esta query dá erro:
INSERT INTO Aluno (nome, email) VALUES ('Ana', 'ana@ex.pt');
Porquê?
Parte III · UPDATE / DELETE
Exercício 5 · UPDATE seguro (15 pts)
a) Como confirmar que UPDATE só vai afectar as linhas certas, antes de o executar?
b) Escreve UPDATE que adiciona "Silva" ao nome de todos os alunos chamados "Ana" (Ana → Ana Silva).
Exercício 6 · DELETE perigoso (10 pts)
Qual a diferença entre estes três comandos? Qual é destrutivo?
DELETE FROM Aluno WHERE id = 5; -- (a)
DELETE FROM Aluno; -- (b)
TRUNCATE TABLE Aluno; -- (c)
Parte IV · Cenário
Exercício 7 · Esquema completo (20 pts)
Escreve SQL completo para criar um esquema de biblioteca:
Autor(id, nome, nacionalidade)Livro(id, titulo, isbn único, ano, autor_id FK)Socio(id, nome, email único)Emprestimo(id, livro_id FK, socio_id FK, data_saida, data_retorno nullable)
Inclui restrições apropriadas e acções referenciais.