---
title: "ABORT"
url: "https://docs.yugabyte.com/stable/api/ysql/the-sql-language/statements/txn_abort/"
---

# ABORT

Use the ABORT statement to roll back the current transaction and discards all updates by the transaction.

## Synopsis

Use the `ABORT` statement to roll back the current transaction and discards all updates by the transaction.

## Syntax

- [![Grammar Icon](/icons/file-lines.svg)Grammar](#grammar-2)
- [![Diagram Icon](/icons/diagram.svg)Diagram](#diagram-2)

```output.ebnf
abort ::= ABORT [ TRANSACTION | WORK ]
```

#### abort

ABORTTRANSACTIONWORK

## Semantics

### *abort*

#### ABORT \[ TRANSACTION | WORK ]

##### WORK

Add optional keyword — has no effect.

##### TRANSACTION

Add optional keyword — has no effect.

## Examples

Create a sample table.

```plpgsql
yugabyte=# CREATE TABLE sample(k1 int, k2 int, v1 int, v2 text, PRIMARY KEY (k1, k2));
```

Begin a transaction and insert some rows.

```plpgsql
yugabyte=# BEGIN TRANSACTION; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
```

```plpgsql
yugabyte=# INSERT INTO sample(k1, k2, v1, v2) VALUES (1, 2.0, 3, 'a'), (1, 3.0, 4, 'b');
```

Open the YSQL shell (`ysqlsh`) and begin another transaction to insert some more rows.

```plpgsql
yugabyte=# BEGIN TRANSACTION; SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
```

```plpgsql
yugabyte=# INSERT INTO sample(k1, k2, v1, v2) VALUES (2, 2.0, 3, 'a'), (2, 3.0, 4, 'b');
```

In each shell, check the only the rows from the current transaction are visible.

First shell.

```plpgsql
yugabyte=# SELECT * FROM sample; -- run in first shell
```

```
 k1 | k2 | v1 | v2
----+----+----+----
  1 |  2 |  3 | a
  1 |  3 |  4 | b
(2 rows)
```

Second shell.

```plpgsql
yugabyte=# SELECT * FROM sample; -- run in second shell
```

```
 k1 | k2 | v1 | v2
----+----+----+----
  2 |  2 |  3 | a
  2 |  3 |  4 | b
(2 rows)
```

Commit the first transaction and abort the second one.

```plpgsql
yugabyte=# COMMIT TRANSACTION; -- run in first shell.
```

Abort the current transaction (from the first shell).

```plpgsql
yugabyte=# ABORT TRANSACTION; -- run second shell.
```

In each shell, check that only the rows from the committed transaction are visible.

```plpgsql
yugabyte=# SELECT * FROM sample; -- run in first shell.
```

```
 k1 | k2 | v1 | v2
----+----+----+----
  1 |  2 |  3 | a
  1 |  3 |  4 | b
(2 rows)
```

```plpgsql
yugabyte=# SELECT * FROM sample; -- run in second shell.
```

```
 k1 | k2 | v1 | v2
----+----+----+----
  1 |  2 |  3 | a
  1 |  3 |  4 | b
(2 rows)
```

## See also

- [BEGIN](/stable/api/ysql/the-sql-language/statements/txn_begin/ "BEGIN")
- [START TRANSACTION](/stable/api/ysql/the-sql-language/statements/txn_start/ "START TRANSACTION")
- [COMMIT](/stable/api/ysql/the-sql-language/statements/txn_commit "COMMIT")
- [ROLLBACK](/stable/api/ysql/the-sql-language/statements/txn_rollback "ROLLBACK")
