ApiaryActive
Try: pause · settings · learn · wipe
← Community / Reading Room
TA
foundations · 2 min read

transactions acid

Database transactions are a set of operations that are executed as a single, all-or-nothing unit. This ensures data consistency and integrity by either fully…

What are Database Transactions?

Database transactions are a set of operations that are executed as a single, all-or-nothing unit. This ensures data consistency and integrity by either fully committing or rolling back the changes made during the transaction.

The ACID Properties

The ACID properties (Atomicity, Consistency, Isolation, Durability) ensure that database transactions behave correctly in the presence of failures and concurrent operations.

Atomicity

  • Ensures that a transaction is treated as a single, indivisible unit.
  • If any part of the transaction fails, the entire transaction is rolled back.
from sqlalchemy import create_engine, Table, MetaData

engine = create_engine('sqlite:///example.db')
metadata = MetaData()

# Create a table with two columns: id and name
users = Table('users', metadata,
              Column('id', Integer, primary_key=True),
              Column('name', String))

try:
    # Start a transaction
    conn = engine.connect()
    trans = conn.begin()

    # Insert a new user into the database
    users.insert().values(id=1, name='John Doe').execute(trans)

    # Commit the transaction
    trans.commit()
except Exception as e:
    # Roll back the transaction if any error occurs
    trans.rollback()
    print(f"Error: {e}")
finally:
    conn.close()

Consistency

  • Ensures that a database remains in a consistent state even after multiple transactions are executed concurrently.
  • Guarantees that all constraints, including primary and foreign keys, are satisfied.
from sqlalchemy import create_engine, Table, MetaData, Column, Integer, String

engine = create_engine('sqlite:///example.db')
metadata = MetaData()

# Create a table with two columns: id and name
orders = Table('orders', metadata,
               Column('id', Integer, primary_key=True),
               Column('customer_id', Integer))

# Create another table with a foreign key referencing the orders table
customers = Table('customers', metadata,
                  Column('id', Integer, primary_key=True),
                  Column('name', String))

try:
    # Start a transaction
    conn = engine.connect()
    trans = conn.begin()

    # Insert a new order into the database
    orders.insert().values(id=1, customer_id=1).execute(trans)

    # Commit the transaction
    trans.commit()
except Exception as e:
    # Roll back the transaction if any error occurs
    trans.rollback()
    print(f"Error: {e}")
finally:
    conn.close()

Isolation

  • Ensures that concurrent transactions do not interfere with each other.
  • Provides different isolation levels, such as Read Committed and Serializable.
from sqlalchemy import create_engine, Table, MetaData, Column, Integer, String

engine = create_engine('sqlite:///example.db')
metadata = MetaData()

# Create a table with two columns: id and name
orders = Table('orders', metadata,
               Column('id', Integer, primary_key=True),
               Column('customer_id', Integer))

try:
    # Start a transaction with isolation level Read Committed
    conn = engine.connect()
    trans = conn.begin(isolation_level='READ COMMITTED')

    # Insert a new order into the database
    orders.insert().values(id=1, customer_id=1).execute(trans)

    # Commit the transaction
    trans.commit()
except Exception as e:
    # Roll back the transaction if any error occurs
    trans.rollback()
    print(f"Error: {e}")
finally:
    conn.close()

Durability

  • Ensures that once a transaction is committed, its effects are permanent and cannot be rolled back.

When to Use Transactions and ACID Properties

Transactions and ACID properties should be used in scenarios where:

  • Data consistency and integrity are critical
  • Concurrency control is necessary
  • High availability and fault tolerance are required

However, transactions can be expensive and may impact performance. In such cases, it's recommended to use optimistic concurrency control or other techniques that minimize the need for explicit transactional behavior.

Related/Sources

Frequently asked
What is transactions acid about?
Database transactions are a set of operations that are executed as a single, all-or-nothing unit. This ensures data consistency and integrity by either fully…
What are Database Transactions?
Database transactions are a set of operations that are executed as a single, all-or-nothing unit. This ensures data consistency and integrity by either fully committing or rolling back the changes made during the transaction.
What should you know about the ACID Properties?
The ACID properties (Atomicity, Consistency, Isolation, Durability) ensure that database transactions behave correctly in the presence of failures and concurrent operations.
What should you know about when to Use Transactions and ACID Properties?
Transactions and ACID properties should be used in scenarios where:
References & sources
  1. Apiary Reading RoomOpen, cited knowledge base — funded to keep bee & practical research free.
From the Apiary Reading Room. Opinion & editorial — not financial advice. We don't overclaim.
More from the Reading Room