> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/server/reference/sql-statements/transactions.md).

# Transactions

{% columns %}
{% column %}
{% content-ref url="/pages/WCv9iCURNsA2RjAPGZth" %}
[COMMIT](/docs/server/reference/sql-statements/transactions/commit.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Commit the current transaction. This statement permanently saves all changes made during the current transaction to the database.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/XYjAufkhBw0V0dAClSPb" %}
[LOCK TABLES](/docs/server/reference/sql-statements/transactions/lock-tables.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Complete LOCK TABLES reference: READ/WRITE/WRITE CONCURRENT lock syntax, table aliases, WAIT n|NOWAIT timeouts, UNLOCK TABLES, and innodb\_table\_locks behavior.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/dWnoPhvm2Vk84Wkk9mq8" %}
[Metadata Locking](/docs/server/reference/sql-statements/transactions/metadata-locking.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Understand how MariaDB manages concurrency. Metadata locks protect the structure of database objects from being modified while they are in use.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/c6QB66PvyalQf971UQPu" %}
[READ COMMITTED](/docs/server/reference/sql-statements/transactions/transactions-read-committed.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Set the transaction isolation level to READ COMMITTED. In this mode, each query within a transaction sees only data committed before the query began.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/G3d3RoUj56nboS8eNgcs" %}
[READ UNCOMMITTED](/docs/server/reference/sql-statements/transactions/transactions-read-uncommitted.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Set the transaction isolation level to READ UNCOMMITTED. This lowest isolation level allows dirty reads, where a transaction can see uncommitted changes.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/C4UUNQLIFSLK3UZDhpB2" %}
[REPEATABLE READ](/docs/server/reference/sql-statements/transactions/transactions-repeatable-read.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Set the transaction isolation level to REPEATABLE READ. This default InnoDB level ensures consistent results for repeated reads within the same transaction.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/9sWZOQlDOkJTq2vPFaoP" %}
[ROLLBACK](/docs/server/reference/sql-statements/transactions/rollback.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Undo changes in the current transaction. This statement reverts the database to its state before the transaction started or to a specific savepoint.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/JK5tbBMSn0DCeRPxTvGP" %}
[SAVEPOINT](/docs/server/reference/sql-statements/transactions/savepoint.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Create a named marker within a transaction. Savepoints allow you to roll back part of a transaction without canceling the entire operation.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/Jh0AyhmUxMV9QUpkXBkC" %}
[SERIALIZABLE](/docs/server/reference/sql-statements/transactions/transactions-serializable.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Set the transaction isolation level to SERIALIZABLE. This highest level ensures total isolation by converting plain SELECTs to locking reads.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/w4jYAZF6te1tu2tAavik" %}
[SQL statements Causing an Implicit Commit](/docs/server/reference/sql-statements/transactions/sql-statements-that-cause-an-implicit-commit.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Identify statements that force a commit. Certain commands, like DDL statements, implicitly commit the current transaction before executing.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/ivpRSsbCRpdr5kdxAS9L" %}
[START TRANSACTION](/docs/server/reference/sql-statements/transactions/start-transaction.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Complete START TRANSACTION reference: BEGIN/COMMIT/ROLLBACK syntax, WITH CONSISTENT SNAPSHOT option, READ ONLY/WRITE modes, AND \[NO] CHAIN/RELEASE modifiers.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/W85HyRo6l62EmOVM1vo3" %}
[Transaction Timeouts](/docs/server/reference/sql-statements/transactions/transaction-timeouts.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Understand how timeouts affect transactions. This section explains system variables that control wait times for locks and transaction duration.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/e0aS8OCcadCxLLN9XFfH" %}
[UNLOCK TABLES](/docs/server/reference/sql-statements/transactions/transactions-unlock-tables.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Release explicit table locks. This statement releases all locks acquired by the current session with LOCK TABLES.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/U33HgWpoK9NAj6Wqc8yY" %}
[WAIT and NOWAIT](/docs/server/reference/sql-statements/transactions/wait-and-nowait.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Control lock wait behavior. These clauses allow statements to wait for a specific timeout or fail immediately if a lock cannot be acquired.
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
{% content-ref url="/pages/qqVgYj762rHechjOr4PA" %}
[XA Transactions](/docs/server/reference/sql-statements/transactions/xa-transactions.md)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
Manage distributed transactions. This section covers XA statements for coordinating two-phase commits across multiple resources.
{% endcolumn %}
{% endcolumns %}
