O comando SAVEPOINT pertence ao grupo TCL (Transaction Control Language) e permite criar pontos de controle dentro de uma transação.
Com ele é possível desfazer apenas parte das operações realizadas sem cancelar toda a transação.
Em transações grandes, pode ser necessário voltar apenas uma etapa específica sem perder todas as alterações anteriores.
Exemplo:
1 - Atualizar cliente
2 - Atualizar pedido
3 - Atualizar estoque
Se ocorrer erro no estoque,
podemos desfazer somente essa etapa.
SAVEPOINT nome_do_ponto;
Podemos excluir um ponto de controle utilizando:
RELEASE SAVEPOINT nome_do_ponto;
START TRANSACTION;
UPDATE clientes
SET cidade='São Paulo'
WHERE id=1;
SAVEPOINT cliente_atualizado;
UPDATE pedidos
SET status='Enviado'
WHERE id=10;
ROLLBACK TO cliente_atualizado;
COMMIT;
O pedido será desfeito, mas a alteração do cliente permanecerá.
O comando permite retornar a um ponto específico da transação.
ROLLBACK TO nome_do_ponto;
Apenas as operações posteriores ao SAVEPOINT serão canceladas.
START TRANSACTION
↓
INSERT
↓
SAVEPOINT etapa1
↓
UPDATE
↓
ROLLBACK TO etapa1
↓
COMMIT
| SAVEPOINT | ROLLBACK |
|---|---|
| Cria ponto de retorno | Desfaz alterações |
| Permite voltar parcialmente | Normalmente cancela toda transação |
| Maior controle | Maior impacto |
É muito utilizado em sistemas que possuem várias etapas de gravação.
| Sistema | Exemplo |
|---|---|
| E-commerce | Pedido, pagamento e estoque |
| Banco | Transferências financeiras |
| ERP | Processos de faturamento |
| Logística | Movimentação de produtos |
| Cuidado | Motivo |
|---|---|
| Criar muitos SAVEPOINTS | Aumenta complexidade |
| Nomear mal os pontos | Dificulta manutenção |
| Não controlar erros | Pode gerar inconsistências |
| Transações longas | Podem bloquear recursos |