# beginTransaction

> Start a database transaction creating a Transaction instance.

> ### For an overview see page McoSqlEngine

> ### Prototypes

>         Transaction* SqlEngine::beginTransaction(Transaction::Mode mode,
>                                 int priority = 0,
>                                 Transaction::IsolationLevel level =
>                                 Transaction::DefaultIsolationLevel)

> ### Arguments

> mode | A Transaction::Mode: `Exclusive, ReadOnly, ReadWrite` or `Update`
> priority | An integer value specifying the transaction priority. (See page Transaction Priorities and Scheduling for further details)
> level | A Transaction::IsolationLevel: `DefaultIsolationLevel, ReadCommitted, RepeatableRead` or `Serializable`. (See page Transaction Isolation Levels for further details)

> ### Description

> This method starts a database transaction creating a Transaction instance. When completed, the Transaction method `commit()` or `rollback()` must be called to close the transaction, and `release()` to release system resources associated with the transaction. In multi-threaded applications, if it is necessary to share a single database connection between multiple threads, the McoSqlSession class must be used and it's Database member's `beginTransaction()` method

> ### Returns

> This method returns a Transaction or throws a RuntimeException in the case of an error.

> ### Example

>         const char * dbname = "SqlDb";

>         int main(int argc, char* argv[])
>         {
>             McoSqlEngine engine;
>             ...
>             engine.open(db_name,  // database name
>                     SqlDb_get_dictionary(),  // database dictionary
>                     DATABASE_SIZE,  // database size
>                     MEMORY_PAGE_SIZE,  // page size
>                     MAP_ADDRESS); // mapping address for shared memory mode
>             ...
>             Transaction* trans = engine.beginTransaction(Transaction::ReadWrite);

>             engine.executeStatement(trans, "update Member set balance=%i where id=%i",

>                             fromBalance, idFrom);

>             engine.executeStatement(trans, "update Member set balance=%i where id=%i",

>                             toBalance, idTo);

>             trans->commit();

>             trans->release();

>             ...
>         }