# Class Transaction (3.7.0-rc)

3.7.0-rc 3.6.0 (latest) 3.5.0 3.4.0 3.3.0 3.2.0 2.48.0-rc 2.47.1 2.46.0 2.45.0 2.44.0 2.43.0 2.42.0 2.41.0 2.40.0 2.39.0 2.38.0 2.37.0 2.36.0 2.35.0 2.34.0 2.33.0 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.0 2.26.0 2.25.1 2.24.0 2.23.0 2.22.1 2.21.0 2.20.0 2.19.0 2.18.0 2.17.0 2.16.0 2.15.1 2.14.0 2.13.0 2.12.0 2.11.0 The representation of a Cloud Spanner transaction.
A transaction is a set of reads and writes that execute atomically at a single logical point in time across the columns/rows/tables in a database. Those reads and writes are grouped by passing them the same [`Transaction`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Transaction).

All reads/writes in the transaction must be executed within the same session, and that session may have only one transaction active at a time.

Spanner supports these transaction modes:

- ReadOnly. Provides guaranteed consistency across several reads, but does not allow writes. Can be configured to read at timestamps in the past. Does not need to be committed and does not take locks.
- ReadWrite. Supports reading and writing data at a single point in time. Uses pessimistic locking and, if necessary, two-phase commit. May abort, requiring the application to rerun.
- SingleUse. A restricted form of a ReadOnly transaction where Spanner chooses the read timestamp.

## Constructors

### Transaction(ReadOnlyOptions)

Construction of read-only and read-write transactions.

> [!NOTE]
> **Note:** This is a lazy evaluated operation. No RPCs are made as part of creating a [`Transaction`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Transaction) object. Instead, the first request to the server (for example as part of a `ExecuteQuery()` call) will also create the transaction.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `opts` | `ReadOnlyOptions` |

### Transaction(ReadWriteOptions)

Construction of read-only and read-write transactions.

> [!NOTE]
> **Note:** This is a lazy evaluated operation. No RPCs are made as part of creating a [`Transaction`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Transaction) object. Instead, the first request to the server (for example as part of a `ExecuteQuery()` call) will also create the transaction.  

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `opts` | `ReadWriteOptions` |

### Transaction(Transaction const \&, ReadWriteOptions)

Construction of read-only and read-write transactions.

> [!NOTE]
> **Note:** This is a lazy evaluated operation. No RPCs are made as part of creating a [`Transaction`](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Transaction) object. Instead, the first request to the server (for example as part of a `ExecuteQuery()` call) will also create the transaction.  

| **Parameters** ||
|---|---|
| **Name** | **Description** |
| `txn` | `Transaction const &` |
| `opts` | `ReadWriteOptions` |

### Transaction(Transaction \&\&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `Transaction &&` |

### Transaction(Transaction const \&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `Transaction const &` |

## Operators

### operator=(Transaction \&\&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `Transaction &&` |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `Transaction &` |   |

### operator=(Transaction const \&)

Regular value type, supporting copy, assign, move.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
|   | `Transaction const &` |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `Transaction &` |   |

## Enum

### google::cloud::spanner::Transaction::IsolationLevel

Defines the isolation level for a transaction.

### google::cloud::spanner::Transaction::ReadLockMode

Read lock mode for ReadWrite transactions The Spanner V1 [Transaction](https://docs.cloud.google.com/cpp/docs/reference/spanner/latest/classgoogle_1_1cloud_1_1spanner_1_1Transaction) proto classes have their own enum implementations.