Douglas Legramante

Douglas Legramante

Informática

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

Para se aprofundar