TCL

SQL TCL: Transações e Integridade Aula 15

Técnico em Desenvolvimento de Sistemas • Banco de Dados

Situação Problema: O Pesadelo do PIX pela Metade

O que acontece se a luz cair no meio de uma transferência de R$ 1.000?

O sistema executa um UPDATE retirando o dinheiro da Conta A. Logo em seguida, o servidor cai antes de executar o UPDATE na Conta B. Para onde vai o dinheiro? A resposta está na TCL (Transaction Control Language) e no modelo ACID.

Garantia TCL TUDO OU NADA

Transações não aceitam estados intermediários ou dados inconsistentes.

1. A Fundação: Conceito ACID e Comandos TCL

As quatro propriedades fundamentais e os comandos que controlam o fluxo de dados.

A Atomicidade

Tudo ou Nada

A transação é um bloco indivisível. Se uma única instrução falhar, 100% da operação é abortada e desfeita.

C Consistência

Regras do Jogo

O banco transiciona de um estado válido a outro estado válido, respeitando todas as regras, chaves e restrições.

I Isolamento

Fila Invisível

Operações concorrentes não interferem entre si. Ninguém vê alterações não finalizadas (BEGIN em aberto).

D Durabilidade

Escrito em Pedra

Após o COMMIT, os dados estão salvos permanentemente no disco, mesmo em quedas de energia.

Comandos Principais da TCL (Transaction Control Language) SQL Standard
BEGIN / START TRANSACTION
Inicia um novo bloco de transação segura. Tranca a visão pública dos dados alterados.
Propriedade: Isolamento
COMMIT
Confirma e salva permanentemente todas as operações feitas desde o último BEGIN.
Propriedade: Durabilidade
ROLLBACK
O "Botão de Pânico". Aborta a transação e restaura os dados ao estado inicial exato.
Propriedade: Atomicidade
SAVEPOINT nome
Cria um ponto de restauração intermediário sem cancelar toda a transação.
Uso: Transações Longas
Demonstração ao Vivo

2. Exemplo Guia Completo para Apresentar em Sala

Passo 1 Preparação de Ambiente

Criação da Tabela e Carga Inicial

Criamos a tabela contas_bancarias com restrição CHECK para saldo não ficar negativo e inserimos dois clientes (Carlos e Mariane).

Passo 2 Sucesso (COMMIT)

Transferência PIX Bem-Sucedida

Iniciamos com BEGIN, debitamos R$ 200 do Carlos (ID 1) e creditamos R$ 200 na Mariane (ID 2). Finalizamos com COMMIT.

Passo 3 Reversão (ROLLBACK)

Simulação de Falha / Botão de Pânico

Iniciamos nova transação, descontamos R$ 500 do Carlos, mas percebemos um erro no ID do destinatário. Disparamos ROLLBACK e nenhum centavo é perdido.

Passo 4 Checkpoint (SAVEPOINT)

Salvamento Parcial com Checkpoint

Processamos pagamento de bônus, salvamos com SAVEPOINT ponto1. Ao tentar uma cobrança indevida, desfazemos apenas de volta para o ponto salvo com ROLLBACK TO ponto1.

exemplo_aula_15_tcl.sql
Supabase / PostgreSQL Compatible
-- ============================================================
-- AULA 15: DEMONSTRAÇÃO PRÁTICA DE TCL (TRANSACTIONS)
-- ============================================================

-- PASSO 1: Preparar a estrutura de dados
DROP TABLE IF EXISTS contas_bancarias;

CREATE TABLE contas_bancarias (
    id INT PRIMARY KEY,
    titular VARCHAR(50) NOT NULL,
    saldo NUMERIC(10,2) CHECK (saldo >= 0)
);

INSERT INTO contas_bancarias (id, titular, saldo) VALUES
(1, 'Carlos Silva', 1000.00),
(2, 'Mariane Costa', 500.00);

-- Conferir estado inicial (Carlos: 1000, Mariane: 500)
SELECT * FROM contas_bancarias;


-- PASSO 2: Transação Com Sucesso (COMMIT)
BEGIN; -- Inicia a transação isolada

UPDATE contas_bancarias SET saldo = saldo - 200.00 WHERE id = 1;
UPDATE contas_bancarias SET saldo = saldo + 200.00 WHERE id = 2;

COMMIT; -- Grava permanentemente! (Carlos: 800, Mariane: 700)


-- PASSO 3: Transação Com Cancelamento/Erro (ROLLBACK)
BEGIN;

UPDATE contas_bancarias SET saldo = saldo - 500.00 WHERE id = 1;
-- Ops! Identificamos um erro de digitação ou o destinatário não existe!

ROLLBACK; -- Desfaz tudo desde o último BEGIN!

-- Conferencia: O saldo de Carlos PERMANECE em 800.00!
SELECT * FROM contas_bancarias WHERE id = 1;


-- PASSO 4: Uso de Ponto de Salvamento (SAVEPOINT)
BEGIN;

UPDATE contas_bancarias SET saldo = saldo + 50.00 WHERE id = 1; -- Bônus

SAVEPOINT ponto_pos_bonus; -- Marco 1

UPDATE contas_bancarias SET saldo = saldo - 9999.00 WHERE id = 1; -- Falhará ou tentará saldo negativo

ROLLBACK TO ponto_pos_bonus; -- Desfaz APENAS a cobrança errada!

COMMIT; -- Mantém o bônus de +50.00! (Carlos termina com 850.00)
Experiência Prática

3. Terminal Interativo de Transações TCL

Teste os botões abaixo para ver o estado das contas mudar ou ser revertido em tempo real.

ESTADO: FORA DE TRANSAÇÃO (AUTO-COMMIT)

Painel de Comandos TCL


Operações DML (Transferências)

Tabela: contas_bancarias Em Memória
Nota: Se você não usar BEGIN, o banco estará em modo auto-commit.
Console de Eventos / Log TCL

[SISTEMA] Banco inicializado com sucesso.

Atividade Individual de Fixação

32 Exercícios Individuais (Um por Aluno)

Cada aluno possui um tema exclusivo do mundo real para aplicar o ciclo BEGIN, COMMIT, ROLLBACK e SAVEPOINT.

Exibindo: 32 exercícios