Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

📝 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 UPDATE ou DELETE dentro de um START TRANSACTION é uma prática Sênior. Se você esquecer o WHERE e estragar a tabela, basta rodar ROLLBACK; em vez de COMMIT; 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.

  1. Insira o novo veículo (ID 30, Placa CCC5555, Status ATIVO).
  2. Atualize o status do veículo 10 para 'VIAGEM'.
  3. 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 UPDATEs que não usam a Chave Primária no WHERE, mas em servidores em nuvem, essa trava não existe! Respeite o WHERE! 🚀🛡️