---
name: "begin"
section: "7"
platform: "linux"
package: "postgresql"
version: "7.4.7-6sarge6"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/begin"
---

# begin(7)

start a transaction block

## NAME

BEGIN - start a transaction block

## SYNOPSIS

```
BEGIN [ WORK | TRANSACTION ]

```

## DESCRIPTION

**BEGIN** initiates a transaction block, that is, all statements after **BEGIN** command will be executed in a single transaction until an explicit COMMIT \[[**commit**(7)](/commit/7.md)\] or ROLLBACK \[**rollback**(l)\] is given. By default (without **BEGIN**), PostgreSQL executes transactions in \`\`autocommit'' mode, that is, each statement is executed in its own transaction and a commit is implicitly performed at the end of the statement (if execution was successful, otherwise a rollback is done).

Statements are executed more quickly in a transaction block, because transaction start/commit requires significant CPU and disk activity. Execution of multiple statements inside a transaction is also useful to ensure consistency when making several related changes: other sessions will be unable to see the intermediate states wherein not all the related updates have been done.

## PARAMETERS

- **WORK**

  - **TRANSACTION**

  Optional key words. They have no effect.

## NOTES

START TRANSACTION \[[**start\_transaction**(7)](/start_transaction/7.md)\] has the same functionality as **BEGIN**.

Use COMMIT \[[**commit**(7)](/commit/7.md)\] or ROLLBACK \[[**rollback**(7)](/rollback/7.md)\] to terminate a transaction block.

Issuing **BEGIN** when already inside a transaction block will provoke a warning message. The state of the transaction is not affected.

## EXAMPLES

To begin a transaction block:

```
BEGIN;

```

## COMPATIBILITY

**BEGIN** is a PostgreSQL language extension. There is no explicit **BEGIN** command in the SQL standard; transaction initiation is always implicit and it terminates either with a **COMMIT** or **ROLLBACK** statement.

Other relational database systems may offer an autocommit feature as a convenience.

Incidentally, the BEGIN key word is used for a different purpose in embedded SQL. You are advised to be careful about the transaction semantics when porting database applications.

## SEE ALSO

COMMIT \[[**commit**(7)](/commit/7.md)\], ROLLBACK \[**rollback**(l)\]
