📝 CAPÍTULO 13: DML — INSERT, UPDATE E DELETE
Se o DDL constrói a "casa", o DML (Data Manipulation Language) são os móveis e as pessoas dentro dela. O DML é a linguagem do dia a dia do desenvolvedor; é com ela que sua aplicação web cadastra usuários, altera senhas e exclui postagens. 🛡️🧩
🎯 Objetivo Curricular
Dominar a sintaxe dos comandos INSERT, UPDATE e DELETE, além de compreender o risco crítico arquitetural de realizar operações massivas sem filtros e regras de segurança.
🏢 O Cenário Prático (Seu Desafio)
Na TecProExpress, um desenvolvedor júnior precisava dar um aumento de 10% no salário do "João". Ele rodou o comando e, quando os holerites saíram, todos os 5.000 funcionários da empresa haviam recebido 10% de aumento. O prejuízo foi milionário.
"Seu desafio é treinar os estagiários para nunca mais cometerem esse erro fatal. Você deve demonstrar o uso seguro da DML, explicando como a cláusula
WHEREé o único escudo entre uma atualização pontual e a demissão sumária por erro em produção."
🧠 Fundamentos: Os Três Pilares da Manipulação
1. Inserindo (INSERT INTO)
O comando INSERT adiciona uma ou mais linhas (tuplas) à tabela.
-- DDL Rápido para contexto
-- CREATE TABLE cliente (id INT PRIMARY KEY, nome VARCHAR(50), saldo DECIMAL(10,2));
-- Inserção Explicita (A mais segura, você diz quais colunas)
INSERT INTO cliente (id, nome, saldo) VALUES (1, 'Maria', 500.00);
-- Inserção Implícita (Se você souber a ordem exata das colunas)
INSERT INTO cliente VALUES (2, 'José', 1000.00);
-- Múltipla (Várias linhas num único comando - Alta Performance)
INSERT INTO cliente (id, nome, saldo) VALUES
(3, 'Ana', 0),
(4, 'Carlos', 200);
2. Atualizando (UPDATE)
Altera dados que já existem. O maior perigo do SQL mora aqui.
-- O Jeito Certo (Uso obrigatório do WHERE)
UPDATE cliente
SET saldo = 800.00
WHERE id = 1; -- Apenas a Maria recebe o novo saldo
-- O Erro do Estagiário (NUNCA FAÇA ISSO)
-- UPDATE cliente SET saldo = 800.00;
-- Efeito: Maria, José, Ana e Carlos teriam seu saldo substituído para 800.
3. Excluindo (DELETE FROM)
Remove linhas inteiras da tabela.
-- Exclusão Segura
DELETE FROM cliente WHERE id = 4; -- O Carlos é removido do sistema
-- O Desastre (Evacuação Total)
-- DELETE FROM cliente;
-- Apaga absolutamente TODAS as linhas da tabela. Apenas a estrutura (DDL) sobrevive.
📖 Exemplo Guiado: O Teste de Sobrevivência (DDL -> DML)
Sempre teste atualizações complexas antes de rodá-las em produção.
🛠️ Código do Exemplo (Com Segurança)
-- PASSO 1: DDL (Criando a Tabela)
CREATE TABLE frota_tecpro (
id_veiculo INT PRIMARY KEY,
placa VARCHAR(7),
status VARCHAR(20)
);
-- PASSO 2: DML (Carga Inicial)
INSERT INTO frota_tecpro VALUES (10, 'AAA1234', 'ATIVO');
INSERT INTO frota_tecpro VALUES (20, 'BBB9999', 'ATIVO');
-- PASSO 3: O Teste de Segurança (Usando transação)
START TRANSACTION;
UPDATE frota_tecpro SET status = 'MANUTENCAO' WHERE id_veiculo = 10;
COMMIT;
🔍 Detalhamento do Código:
- Envelopar um
UPDATEouDELETEdentro de umSTART TRANSACTIONé uma prática Sênior. Se você esquecer oWHEREe estragar a tabela, basta rodarROLLBACK;em vez deCOMMIT;para desfazer o erro antes que ele seja salvo no disco!
🛠️ Prática Obrigatória: A Manutenção da Frota
Cenário: A TecProExpress vendeu o veículo 20 e comprou um novo veículo 30.
- Insira o novo veículo (ID 30, Placa CCC5555, Status ATIVO).
- Atualize o status do veículo 10 para 'VIAGEM'.
- Exclua o veículo 20 do sistema.
🚀 Script de Seed (Gabarito DML)
-- 1. Insert
INSERT INTO frota_tecpro (id_veiculo, placa, status)
VALUES (30, 'CCC5555', 'ATIVO');
-- 2. Update seguro (Sempre use a Chave Primária no WHERE!)
UPDATE frota_tecpro
SET status = 'VIAGEM'
WHERE id_veiculo = 10;
-- 3. Delete seguro
DELETE FROM frota_tecpro
WHERE id_veiculo = 20;
📤 Instruções de Entrega (Microsoft Teams)
Após validar seus códigos práticos e de estudo:
Use o operador e para critérios rigorosos e ou para critérios flexíveis. Salve os arquivos com a extensão .sql (Ex: Atividade_XX_SeuNome.sql ou Atividade_XX_SeuNome.png ou Atividade_XX_SeuNome.drawio
💡 Checkpoint de Lógica
[!WARNING] Reflexão Profissional: Diferente de editores de texto como o Word, comandos DML como UPDATE e DELETE sem controle transacional (como vimos no Cap 03) não possuem Ctrl+Z. Ao executar o comando, o disco rígido é reescrito instantaneamente. No MySQL Workbench, existe uma trava de segurança chamada Safe Updates que bloqueia
UPDATEsque não usam a Chave Primária noWHERE, mas em servidores em nuvem, essa trava não existe! Respeite oWHERE! 🚀🛡️