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 comWHERE, senão altera a tabela inteira.DELETE FROM t WHERE ...: idem, semWHERE, apaga tudo.BEGIN; ... COMMIT;(ouROLLBACK;): 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.
UPDATEouDELETEsemWHEREatinge a tabela inteira. E não pede confirmação. Hábito que salva: escreva primeiro comoSELECTcom o mesmoWHERE, confira quais linhas voltam, e só então troque o começo porUPDATEouDELETE.- 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ãoCOMMITouROLLBACK. - Conte antes de escrever.
SELECT COUNT(*)com o mesmoWHEREdiz quantas linhas você está prestes a mudar. Se o número surpreender, pare. INSERTsem 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.