Aprenda a trabalhar com transações no MySQL utilizando PHP

Veja como utilizar transações no MySQL com PHP para garantir a consistência de dados em operações complexas.

Como trabalhar com transações no MySQL usando PHP?

As transações no MySQL garantem que um conjunto de operações ocorra de forma atômica, ou seja, todas as operações são concluídas com sucesso ou nenhuma delas é aplicada. Isso evita dados inconsistentes em situações críticas como pagamentos ou transferências bancárias.

Habilitando o Uso de Transações

O MySQL permite transações apenas em tabelas InnoDB, então primeiro precisamos garantir que nossa tabela suporta transações:

CREATE TABLE contas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario VARCHAR(100) NOT NULL,
    saldo DECIMAL(10,2) NOT NULL
) ENGINE=InnoDB;

Criando uma Transação Simples com PDO

Aqui está um exemplo de uma transferência de saldo entre contas, garantindo que ambas as operações (débito e crédito) sejam executadas com sucesso antes de confirmar a transação.

<?php
try {
    $conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
    $conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Iniciar transação
    $conexao->beginTransaction();

    // Debitar da conta de origem
    $sql1 = "UPDATE contas SET saldo = saldo - 100 WHERE usuario = 'Alice'";
    $conexao->exec($sql1);

    // Creditar na conta de destino
    $sql2 = "UPDATE contas SET saldo = saldo + 100 WHERE usuario = 'Bob'";
    $conexao->exec($sql2);

    // Confirmar transação
    $conexao->commit();
    echo "Transferência realizada com sucesso!";
} catch (Exception $e) {
    // Reverter caso haja erro
    $conexao->rollBack();
    echo "Erro na transferência: " . $e->getMessage();
}
?>

Explicação do Código

  • beginTransaction(): inicia a transação.
  • exec(): executa as operações de débito e crédito.
  • commit(): confirma as alterações no banco de dados.
  • rollBack(): reverte as operações se houver erro.

As transações são fundamentais para operações bancárias, sistemas financeiros e qualquer aplicação que necessite de garantia de integridade dos dados. Ao utilizar beginTransaction() e commit(), garantimos que todas as operações são concluídas com sucesso antes de serem aplicadas ao banco.

Algumas aplicações:

  • Sistemas bancários e financeiros
  • Plataformas de pagamento online
  • Gerenciamento de pedidos em e-commerce
  • Sistemas que realizam múltiplas atualizações simultâneas

Dicas para quem está começando

  • Use transações apenas em tabelas InnoDB (MyISAM não suporta transações).
  • Garanta que todas as operações dentro da transação sejam concluídas antes do commit().
  • Utilize rollBack() para reverter a transação em caso de erro.
  • Evite deixar transações abertas por muito tempo para não sobrecarregar o banco.
  • Se possível, utilize try/catch para capturar erros e evitar inconsistências.

Contribuições de Daniel Moreira

Compartilhe este tutorial: Como trabalhar com transações no MySQL usando PHP?

Compartilhe este tutorial

Continue aprendendo:

Como configurar conexões persistentes no MySQL com PHP?

Veja como configurar conexões persistentes no MySQL com PHP para otimizar o desempenho da aplicação.

Tutorial anterior

Como verificar se um registro já existe antes de inserir no MySQL com PHP?

Veja como evitar a inserção duplicada de registros no MySQL com PHP, verificando previamente a existência do dado no banco.

Próximo tutorial