PostgreSQL - TRANSAÇÕES

Uma transação é uma unidade de trabalho executada em um banco de dados. As transações são unidades ou sequências de trabalho realizadas em uma ordem lógica, seja de forma manual por um usuário ou automaticamente por algum tipo de programa de banco de dados.

Uma transação é a propagação de uma ou mais alterações no banco de dados. Por exemplo, se você estiver criando um registro, atualizando um registro ou excluindo um registro da tabela, então você está executando uma transação na tabela. É importante controlar as transações para garantir a integridade dos dados e lidar com os erros do banco de dados.

Praticamente, você agrupará muitas consultas do PostgreSQL em um grupo e executará todas elas juntas como parte de uma transação.

Propriedades das transações

As transações têm as quatro propriedades padrão a seguir, geralmente conhecidas pela sigla ACID -

  • Atomicity- Garante que todas as operações dentro da unidade de trabalho sejam concluídas com sucesso; caso contrário, a transação é abortada no ponto de falha e as operações anteriores voltam ao estado anterior.

  • Consistency - Garante que o banco de dados mude de estado corretamente após uma transação confirmada com sucesso.

  • Isolation - Permite que as transações operem de forma independente e transparente entre si.

  • Durability - Garante que o resultado ou efeito de uma transação confirmada persiste em caso de falha do sistema.

Controle de transação

Os seguintes comandos são usados ​​para controlar as transações -

  • BEGIN TRANSACTION - Para iniciar uma transação.

  • COMMIT - Para salvar as alterações, alternativamente, você pode usar END TRANSACTION comando.

  • ROLLBACK - Para reverter as alterações.

Os comandos de controle transacional são usados ​​apenas com os comandos DML INSERT, UPDATE e DELETE. Eles não podem ser usados ​​ao criar tabelas ou eliminá-los porque essas operações são confirmadas automaticamente no banco de dados.

O comando BEGIN TRANSACTION

As transações podem ser iniciadas usando BEGIN TRANSACTION ou simplesmente o comando BEGIN. Essas transações geralmente persistem até que o próximo comando COMMIT ou ROLLBACK seja encontrado. Mas uma transação também ROLLBACK se o banco de dados for fechado ou se ocorrer um erro.

A seguir está a sintaxe simples para iniciar uma transação -

BEGIN;

or

BEGIN TRANSACTION;

O Comando COMMIT

O comando COMMIT é o comando transacional usado para salvar as alterações invocadas por uma transação no banco de dados.

O comando COMMIT salva todas as transações no banco de dados desde o último comando COMMIT ou ROLLBACK.

A sintaxe do comando COMMIT é a seguinte -

COMMIT;

or

END TRANSACTION;

O comando ROLLBACK

O comando ROLLBACK é o comando transacional usado para desfazer transações que ainda não foram salvas no banco de dados.

O comando ROLLBACK só pode ser usado para desfazer transações desde que o último comando COMMIT ou ROLLBACK foi emitido.

A sintaxe do comando ROLLBACK é a seguinte -

ROLLBACK;

Exemplo

Considere que a tabela COMPANY possui os seguintes registros -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Agora, vamos iniciar uma transação e excluir os registros da tabela com idade = 25 e finalmente usar o comando ROLLBACK para desfazer todas as alterações.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

Se você verificar a tabela COMPANY ainda possui os seguintes registros -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Agora, vamos iniciar outra transação e excluir os registros da tabela com idade = 25 e, finalmente, usar o comando COMMIT para confirmar todas as alterações.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

Se você verificar a tabela COMPANY, ela ainda possui os seguintes registros -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)