MySQL: Uma explicação detalhada sobre transações no MySQL e…

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

As transações garantem a atomicidade das operações com dados — elas são totalmente bem-sucedidas ou totalmente malsucedidas.

Esta aula explica os princípios e o uso das transações.

100%
graph TB
    A[START TRANSACTION] --> B[ExecuteSQLOperation]
    B --> C{Was it successful??}
    C -->|All successful| D[COMMIT]
    C -->|Partial failure| E[ROLLBACK]
    B --> F[SAVEPOINT Save Point]
    F --> G[ROLLBACK TO sp]
    G --> B
    D --> H[Data Persistence]
    E --> I[Data Restored to Before Transaction]

1. O que você vai aprender


2. Uma história real sobre uma transferência bancária

(1) Problema: a transferência falha no meio do processo

A transfere 100 yuans para B:

SQL
UPDATE accounts SET balance = balance - 100 WHERE id = 1;  -- Success
-- At this point, the system crashes
UPDATE accounts SET balance = balance + 100 WHERE id = 2;  -- Not executed

Resultado: A ficou com um déficit de 100, e B não recebeu nada — o dinheiro simplesmente desapareceu no ar.

(2) Resolução de transações

SQL
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;  -- Submit only if both are successful

3. Propriedades do ACID

Recurso Descrição Implementação
Atomicidade Uma transação é uma unidade indivisível de trabalho log de reversão
Consistência Os dados permanecem consistentes antes e depois de uma transação Camada de aplicação + restrições
Isolamento As transações simultâneas não interferem umas nas outras Bloqueios + MVCC
Durabilidade Os dados são armazenados permanentemente após o envio log de refazer

4. Operações de transação

▶ Exemplo: Transações básicas

SQL
-- Start Transaction
START TRANSACTION;

-- Perform an operation
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- Commit Transaction
COMMIT;

-- Or roll back the transaction
ROLLBACK;
▶ Experimente

▶ Exemplo: SAVEPOINT

SQL
START TRANSACTION;

INSERT INTO orders (customer_id, amount) VALUES (1, 100);
SAVEPOINT sp1;

INSERT INTO order_items (order_id, product_id) VALUES (LAST_INSERT_ID(), 1);
SAVEPOINT sp2;

-- Roll back to sp1(Retain the first item INSERT)
ROLLBACK TO sp1;

-- Submit(Keep only the first one INSERT)
COMMIT;
▶ Experimente

5. Envio automático

▶ Exemplo: AUTOCOMMIT

SQL
-- View Auto-Submit Status
SELECT @@autocommit;

-- Turn off Auto-Submit
SET autocommit = 0;

-- Enable Auto-Submit
SET autocommit = 1;
▶ Experimente
autocommit Descrição
1 (padrão) Confirmar automaticamente cada instrução
0 Requer um COMMIT manual

6. Níveis de isolamento de transações

Nível de isolamento Leitura suja Leitura não repetível Leitura fantasma Desempenho
LEITURA NÃO CONFIRMADA ✅ ✅ ✅ Máximo
LEITURA CONFIRMADA ❌ ✅ ✅ Alto
LEITURA REPETÍVEL (Padrão) ❌ ❌ ✅ Média
SERIALIZÁVEL ❌ ❌ ❌ Mais baixo

▶ Exemplo: Definindo o nível de isolamento

SQL
-- View the current isolation level
SELECT @@transaction_isolation;

-- Set the isolation level
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
▶ Experimente

7. Demonstração de problemas de concorrência

(1) Leitura suja

SQL
-- Transaction A
START TRANSACTION;
UPDATE accounts SET balance = 1000 WHERE id = 1;
-- Not committed

-- Transaction B (READ UNCOMMITTED)
SELECT balance FROM accounts WHERE id = 1;  -- Read 1000 (Dirty Data)

-- Transaction A
ROLLBACK;  -- Rollback

-- Transaction B: data read is now invalid

(2) Leituras não repetíveis

SQL
-- Transaction A
START TRANSACTION;
SELECT balance FROM accounts WHERE id = 1;  -- Read 500

-- Transaction B
UPDATE accounts SET balance = 1000 WHERE id = 1;
COMMIT;

-- Transaction A
SELECT balance FROM accounts WHERE id = 1;  -- Read 1000 (Inconsistent)
COMMIT;

❓ Perguntas Frequentes

P: Qual é o nível de isolamento padrão no MySQL? R: REPEATABLE READ, implementado por meio de MVCC + bloqueios de intervalo.

P: O que acontece se uma transação não for confirmada? R: O bloqueio permanece ativo, e outras transações podem atingir o tempo limite enquanto aguardam.

P: É possível reverter um DDL? R: Não, o DDL é confirmado automaticamente e não pode ser revertido.

P: O que significa “confirmação implícita”? R: Quando instruções DDL (CREATE/ALTER/DROP) são executadas, a transação atual é automaticamente confirmada; isso é conhecido como confirmação implícita.

P: Quais são os riscos associados a transações de grande porte? R: Duração prolongada dos bloqueios, aumento excessivo do log de reversão e aumento da latência entre mestre e escravo. Recomenda-se dividi-las em transações menores.


📖 Resumo


📝 Exercícios

  1. Problema básico (Dificuldade: ⭐): Escreva uma transação que transfira 100 da Conta A para a Conta B.

  2. Problema avançado (Dificuldade ⭐⭐): Use SAVEPOINT para implementar uma reversão parcial.

  3. Questão desafiadora (Dificuldade: ⭐⭐⭐): Demonstre o problema da leitura não repetível e resolva-o utilizando o nível de isolamento REPEATABLE READ.

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%