18-DML: UPDATE e DELETE
Materiais desta aula
UPDATE e DELETE
1. Depois de inserir, alterar e remover
No Encontro 17 aprendemos a colocar dados dentro das tabelas (INSERT). Hoje aprendemos os outros dois comandos que completam o DML: UPDATE (altera dados que já existem) e DELETE (remove dados). Os três — INSERT, UPDATE, DELETE — são os comandos que manipulam dados no dia a dia de qualquer sistema.
2. UPDATE — sintaxe básica
UPDATE tabela SET coluna = novo_valor WHERE condicao;
Exemplo:
UPDATE aluno SET turma = '1B' WHERE matricula = 3;
Isso altera a turma apenas do aluno de matrícula 3. É possível alterar mais de uma coluna no mesmo comando, separando por vírgula:
UPDATE aluno SET turma = '1B', nome = 'Novo Nome' WHERE matricula = 3;
3. Por que o WHERE é obrigatório, na prática
Sintaticamente, o MySQL aceita um UPDATE sem WHERE — mas na prática, é uma regra que você nunca deve quebrar. Sem WHERE, o comando altera todas as linhas da tabela, não só a que você tinha em mente.
-- Isso muda a turma de TODOS os alunos para '1B'!
UPDATE aluno SET turma = '1B';
Hábito de segurança: antes de rodar um UPDATE (ou DELETE, como veremos), escreva primeiro um SELECT com o mesmo WHERE, para conferir exatamente quais linhas serão afetadas. Só depois troque o SELECT * por UPDATE ... SET.
4. WHERE composto: AND e OR
Um WHERE pode ter mais de uma condição:
- AND — as duas condições precisam ser verdadeiras.
- OR — pelo menos uma das condições precisa ser verdadeira.
-- AND: só altera se as DUAS condições forem verdadeiras
UPDATE aluno SET turma = '1C' WHERE matricula = 2 AND nome = 'Bruno Costa';
-- OR: altera se PELO MENOS UMA condição for verdadeira
UPDATE aluno SET turma = '1C' WHERE turma = '1A' OR turma = '1B';
5. DELETE — sintaxe básica
DELETE FROM tabela WHERE condicao;
Exemplo:
DELETE FROM livro WHERE codigo = 5;
O mesmo aviso do UPDATE vale aqui, ainda mais forte: sem WHERE, o DELETE apaga todas as linhas da tabela.
-- Isso apaga TODOS os livros da tabela!
DELETE FROM livro;
6. DELETE e integridade referencial: o outro lado da moeda
No Encontro 17, vimos que o MySQL não deixa inserir um Empréstimo para um Aluno que não existe. Hoje vemos o lado inverso: o MySQL também não deixa você excluir um Aluno que já tem Empréstimos vinculados.
DELETE FROM aluno WHERE matricula = 1;
-- ERROR 1451: Cannot delete or update a parent row:
-- a foreign key constraint fails
Isso acontece porque, se o aluno fosse excluído, os empréstimos dele ficariam "órfãos" — apontando para um aluno que não existe mais. O MySQL protege a integridade do banco recusando a exclusão.
Para excluir mesmo assim, seria preciso excluir (ou realocar) primeiro os empréstimos daquele aluno, e só depois o aluno. Existem formas de configurar o banco para excluir automaticamente em cascata (ON DELETE CASCADE), mas isso é avançado — por padrão, o MySQL sempre recusa, como vimos aqui.
7. Prévia do próximo encontro
No Encontro 19, vamos consolidar tudo isso numa prática só, com diagnóstico de erros comuns — igual fizemos no Encontro 13 para CREATE TABLE.
Vídeos sobre o assunto
- Curso MySQL — UPDATE e DELETE — Curso em Vídeo, mesma série usada nos Encontros 3, 11 e 17.
Para se aprofundar
- MySQL UPDATE Statement — W3Schools — referência com exemplos práticos.
- MySQL DELETE Statement — W3Schools — referência com exemplos práticos.