Skip to main content
Using the transaction() method allows fine-grained control over transactions.

Manual Transaction Overview

Fine-Grained Control

Clear transaction boundaries Partial transactions possible

Conditional Rollback

Rollback based on conditions Validate before commit

Nested Transactions

Savepoint support Partial rollback support

Explicit Management

Clear transaction flow Easier debugging

Basic Usage

Simple Transaction

When the transaction() callback function completes successfully, it automatically COMMITs. If an error occurs, it automatically ROLLBACKs.

Transaction Flow

Practical Examples

Example 1: Basic Transaction

Example 2: Conditional Rollback

Example 3: With UpsertBuilder

Nested Transactions (Savepoint)

Basic Nesting

Partial Rollback

Benefits of Nested Transactions: - Independent rollback of partial operations - Structure complex business logic - Error isolation possible

Explicit Rollback

Calling rollback()

Code continues to execute even after calling rollback(). You must explicitly return or throw.

Transaction Isolation Levels

Setting Isolation Level

Isolation Level Characteristics

Isolation Level Selection Guide: - General read/write: READ COMMITTED - Consistency important: REPEATABLE READ (default) - Financial transactions: SERIALIZABLE

Error Handling

Try-Catch Pattern

Error Handling Within Transactions

Transaction Debugging

Logging

Performance Optimization

Minimize Transactions

Transaction Optimization Principles: - Keep transactions as short as possible - External API calls outside transactions - Read-only queries don’t need transactions - Minimize lock wait time

@transactional vs Manual Transaction

Comparison

Selection Guide

Next Steps

@transactional

Easy with decorators

Best Practices

Transaction usage guide

UpsertBuilder

Saving data in transactions

Puri

Using query builder