QA Learning / SQL

Módulo 7: Escrever dados

INSERT, UPDATE, DELETE, transações

Teoria

  • INSERT INTO t (col1, col2) VALUES (v1, v2): cria linha nova.
  • UPDATE t SET col = valor WHERE ...: sempre com WHERE, senão altera a tabela inteira.
  • DELETE FROM t WHERE ...: idem, sem WHERE, apaga tudo.
  • BEGIN; ... COMMIT; (ou ROLLBACK;): agrupa mudanças; testa antes de confirmar.
  • Aqui as mudanças valem só nesta aba, na cópia em memória. O botão Resetar banco volta tudo aos dados originais, use à vontade.

Exemplos de aplicação

Um exemplo montado pra cada item da teoria acima. Não precisa rodar: é pra ver a cara do recurso e entender cada pedaço. Os valores são ilustrativos.

INSERT INTO ... VALUES

INSERT INTO defeitos
  (titulo, modulo, severidade, prioridade, status, reportado_por, ambiente, data_abertura, data_fechamento)
VALUES
  ('Botao de pagar sem resposta', 'pagamento', 'alta', 'P2', 'aberto', 'ezequiel', 'homolog', '2026-09-02', NULL);

A lista entre parênteses são as colunas que você vai preencher; o VALUES traz os valores na mesma ordem. Colunas não citadas ficam com o padrão (o id se preenche sozinho). data_fechamento entra como NULL porque o defeito nasce aberto.

UPDATE ... SET ... WHERE

UPDATE defeitos
SET status = 'resolvido',
    data_fechamento = '2026-09-10'
WHERE id = 57;

SET lista as colunas a mudar e o novo valor de cada. O WHERE id = 57 limita a mudança a uma linha. Sem WHERE, o SET valeria pra tabela inteira. Rode um SELECT com o mesmo WHERE antes, pra ver o que será afetado.

DELETE FROM ... WHERE

DELETE FROM itens_pedido
WHERE pedido_id = 143;

Apaga as linhas que casam com o WHERE: aqui, todos os itens do pedido 143. Mesma regra do UPDATE: sem WHERE, esvazia a tabela. Confirme antes com SELECT COUNT(*) FROM itens_pedido WHERE pedido_id = 143;.

BEGIN; ... COMMIT; / ROLLBACK;

BEGIN;

UPDATE pedidos          SET status = 'cancelado' WHERE id = 88;
DELETE FROM itens_pedido WHERE pedido_id = 88;

-- conferiu com SELECT e está certo?
COMMIT;      -- grava as duas mudanças de uma vez
-- ROLLBACK; -- desfaz tudo desde o BEGIN

BEGIN abre a transação: as mudanças ficam "em suspenso". Você roda vários comandos, confere com SELECT, e só então decide: COMMIT grava tudo junto, ROLLBACK joga tudo fora. Evita deixar o banco num meio-termo (pedido cancelado mas itens ainda lá).

Neste site as escritas rodam só na cópia em memória desta aba: o botão Resetar banco volta os dados originais, então pode testar INSERT/UPDATE/DELETE à vontade.

Pegadinhas deste módulo

Os erros que quase todo mundo comete aqui. Ler agora poupa meia hora de confusão depois, e alguns deles são a causa de relatório errado em projeto real.

  • UPDATE ou DELETE sem WHERE atinge a tabela inteira. E não pede confirmação. Hábito que salva: escreva primeiro como SELECT com o mesmo WHERE, confira quais linhas voltam, e só então troque o começo por UPDATE ou DELETE.
  • Sem BEGIN, cada comando já está confirmado. Na maioria das ferramentas não existe "desfazer". Em dado que importa, abra a transação antes, confira o resultado, e só então COMMIT ou ROLLBACK.
  • Conte antes de escrever. SELECT COUNT(*) com o mesmo WHERE diz quantas linhas você está prestes a mudar. Se o número surpreender, pare.
  • INSERT sem nomear as colunas quebra quando a tabela muda. INSERT INTO t VALUES (...) depende da ordem das colunas. Nomeie sempre: INSERT INTO t (a, b) VALUES (...).
  • Massa de teste criada por você também precisa ser limpa. Dado de teste esquecido em ambiente compartilhado vira o "bug" que outra pessoa vai investigar na semana que vem.

Prática

Cada exercício pode ter vários comandos separados por ;; todos rodam. Rode com o botão ou Ctrl+Enter.

carregando banco…

Query livre

Olhar de QA

Escrever no banco é a parte do SQL em que QA precisa de mais disciplina, porque não existe desfazer. O hábito que salva: escreva primeiro como SELECT com o mesmo WHERE, confira as linhas que voltam, e só então troque o começo por UPDATE ou DELETE. E lembre que massa de teste criada por você em ambiente compartilhado é lixo que outra pessoa vai investigar como bug na semana que vem, então limpe o que criar.

Terminou este módulo? Marque: o ✓ aparece no índice da trilha e a barra de progresso anda no começo do site. Fica salvo só no seu navegador.