MySQL: Uma explicação detalhada das operações INSERT,…

Última atualização: 2026-08-26

Inserir, atualizar e excluir dados são operações básicas de banco de dados — INSERT, UPDATE e DELETE constituem o núcleo da DML.

Esta aula apresenta uma explicação sistemática sobre como inserir, atualizar e excluir dados.

100%
graph TB
    A[DML Operation] --> B[INSERT Insert]
    A --> C[UPDATE Update]
    A --> D[DELETE Delete]
    B --> B1[Single-row insertion]
    B --> B2[Multi-line Insertion]
    B --> B3[Subquery Insertion]
    B --> B4[UPSERT]
    C --> C1[Conditional Update]
    C --> C2[JOIN Update]
    D --> D1[Conditional Deletion]
    D --> D2[TRUNCATE Clear]

1. O que você vai aprender


2. Uma história real

(1) Problema: A inserção manual de dados, um por um, é extremamente ineficiente

O sistema de gestão de estoque processa mais de 10.000 gravações de dados diariamente. A equipe de operações realiza manualmente as operações INSERT e UPDATE, uma a uma, o que não só é extremamente ineficiente, mas também costuma levar à corrupção de dados devido a erros de copiar e colar. Durante um ajuste de preços em lote, a execução das instruções UPDATE, uma a uma, levou três horas; nesse período, um funcionário inseriu acidentalmente a cláusula WHERE errada, fazendo com que todos os preços da tabela fossem definidos como 0.

(2) Uma solução que combina operações em lote e transações

Utilize INSERTs em lote, UPDATEs transacionais e DELETEs condicionais, combinados com INSERT ON DUPLICATE KEY UPDATE, para processar todos os dados em uma única operação.

Dimensão Operações individuais Operações em lote + transações
10.000 gravações ~3 horas ~3 minutos
Risco de erro Alto (sujeito a erros manuais) Baixo (proteção de transações)
Idas e voltas na rede 10.000 1
Aumento de velocidade 50x

3. INSERT: Inserção de dados

▶ Exemplo: inserção de uma única linha

SQL
-- Insert in Full
INSERT INTO users (username, email, age) 
VALUES ('alice', 'alice@email.com', 25);

-- Omit field names(Must be in order)
INSERT INTO users VALUES (1, 'bob', 'bob@email.com', 30);
▶ Experimente

▶ Exemplo: Inserção de várias linhas

SQL
INSERT INTO products (name, price, category) VALUES
('iPhone', 999, 'Phone'),
('MacBook', 1999, 'Laptop'),
('iPad', 599, 'Tablet');
▶ Experimente

▶ Exemplo: Inserção de uma subconsulta

SQL
-- Insert from Query Results
INSERT INTO user_archive (id, name, email)
SELECT id, name, email FROM users WHERE status = 'deleted';
▶ Experimente

4. ATUALIZAÇÃO: Atualizar dados

▶ Exemplo: Atualização condicional

SQL
-- Update a Single Record
UPDATE users SET email = 'new@email.com' WHERE id = 1;

-- Update Multiple Records
UPDATE products SET price = price * 1.1 WHERE category = 'Electronics';

-- Multi-Field Update
UPDATE users SET age = age + 1, status = 'active' WHERE id = 1;
▶ Experimente

▶ Exemplo: UPDATE + JOIN

SQL
-- Related Updates
UPDATE orders o
INNER JOIN customers c ON o.customer_id = c.id
SET o.status = 'priority'
WHERE c.level = 'VIP';
▶ Experimente

5. DELETE: Exclusão de dados

▶ Exemplo: Exclusão condicional

SQL
-- Delete a Single Record
DELETE FROM users WHERE id = 1;

-- Delete Multiple Records
DELETE FROM orders WHERE status = 'cancelled' AND created_at < '2025-01-01';

-- Deleting Related Records
DELETE o FROM orders o
INNER JOIN customers c ON o.customer_id = c.id
WHERE c.status = 'banned';
▶ Experimente

(1) TRUNCATE x DELETE

Dimensão TRUNCATE DELETE
Velocidade Muito rápida Lenta
Transação Sem reversão Com reversão
Acionador Não acionado Acionado
AUTO_INCREMENT Reiniciar Não reiniciar
ONDE Não compatível Compatível
SQL
-- Clear the table (Non-rollbackable)
TRUNCATE TABLE temp_data;

6. INSERT ON DUPLICATE KEY UPDATE

Execute a atualização caso haja um conflito de chave primária ou chave única.

▶ Exemplo: Operação UPSERT

SQL
-- Insert or Update
INSERT INTO product_stats (product_id, view_count, last_viewed)
VALUES (1, 1, NOW())
ON DUPLICATE KEY UPDATE
    view_count = view_count + 1,
    last_viewed = NOW();

-- Batch UPSERT
INSERT INTO user_scores (user_id, score) VALUES
(1, 100), (2, 200), (3, 300)
ON DUPLICATE KEY UPDATE
    score = VALUES(score);
▶ Experimente

7. REPLACE INTO

Exclua primeiro e, em seguida, insira (em caso de conflito).

▶ Exemplo: REPLACE

SQL
-- Replace if it exists, insert if it doesn't
REPLACE INTO users (id, username, email)
VALUES (1, 'alice_updated', 'alice_new@email.com');
▶ Experimente
⚠️ Observação: A instrução REPLACE exclui a linha antiga e, em seguida, insere uma nova, acionando os gatilhos DELETE e INSERT, e o valor de AUTO_INCREMENT será alterado.


8. Diretrizes de segurança

Ação Recomendação
ATUALIZAR/EXCLUIR É necessário incluir uma cláusula WHERE; primeiro, use SELECT para confirmar o escopo da operação
Operações em massa Executar em lotes de 1.000 a 5.000 linhas cada
Ambiente de produção Inicie uma transação e, após a confirmação, execute o comando COMMIT
Backup Antes da operação mysqldump Backup

▶ Exemplo: Processo de atualização de segurança

SQL
-- 1. Check and confirm first
SELECT COUNT(*) FROM orders WHERE status = 'cancelled' AND created_at < '2025-01-01';

-- 2. Start a transaction
START TRANSACTION;

-- 3. Execute Delete
DELETE FROM orders WHERE status = 'cancelled' AND created_at < '2025-01-01';

-- 4. Submit after verifying that everything is correct
COMMIT;
-- Or roll back if a problem is detected
-- ROLLBACK;
▶ Experimente

❓ Perguntas Frequentes

P: A ordem dos campos em uma instrução INSERT precisa corresponder à definição da tabela? R: Só precisa corresponder quando os nomes dos campos são omitidos. Recomenda-se especificar explicitamente os nomes dos campos para não depender da ordem.

P: É possível recuperar dados após um DELETE? R: É possível executar um ROLLBACK dentro de uma transação. Para dados que já foram confirmados (COMMITTED), será necessário restaurá-los a partir de um backup. Um TRUNCATE não pode ser revertido.

P: Como posso otimizar operações INSERT em massa? R: Use VALUES com várias linhas, desative o auto-commit, desative os índices e use LOAD DATA INFILE.

P: Qual é a diferença entre INSERT e REPLACE? R: O INSERT retorna um erro se encontrar um conflito de chave única, enquanto o REPLACE exclui o registro antes de inserir um novo (o ID será alterado). Recomendamos usar ON DUPLICATE KEY UPDATE.

P: Qual é a diferença entre DELETE e TRUNCATE? R: DELETE exclui as linhas uma a uma e permite a reversão, enquanto TRUNCATE esvazia a tabela, não permite a reversão, mas é extremamente rápido.


📖 Resumo


📝 Exercícios

  1. Problema básico (Dificuldade ⭐): Insira 5 registros de teste na tabela users.

  2. Problema avançado (Dificuldade: ⭐⭐): Implemente um contador de visitas usando INSERT ON DUPLICATE KEY UPDATE.

  3. Desafio (Dificuldade: ⭐⭐⭐): Escreva um script para excluir com segurança os dados temporários de 30 dias atrás, utilizando proteção de transação.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%