English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriais básicos PostgreSQL

Tutoriais avançados PostgreSQL

Interface PostgreSQL

Transação (TRANSACTION) do PostgreSQL

TRANSACTION (transação) é uma unidade lógica do processo de execução do sistema de gerenciamento de banco de dados, composta por uma sequência limitada de operações de banco de dados.

A transação de banco de dados geralmente contém uma sequência de leituras no banco de dados/Operações de escrita. Inclui os seguintes dois objetivos:

  • Fornece um método para recuperação de sequências de operações de banco de dados de falhas para um estado normal, e ao mesmo tempo, fornece um método para que o banco de dados possa manter a consistência mesmo em condições de exceção.

  • Quando vários aplicativos acessam o banco de dados de forma concorrente, pode-se fornecer um método de isolamento entre esses aplicativos para evitar que suas operações se interferem mutuamente.

Quando uma transação é submetida ao sistema de gerenciamento de banco de dados (DBMS), o DBMS deve garantir que todas as operações dentro dessa transação sejam concluídas com sucesso e seus resultados sejam permanentemente armazenados no banco de dados. Se algumas operações dentro da transação não forem concluídas com sucesso, todas as operações na transação devem ser revertidas, retornando ao estado antes da execução da transação; ao mesmo tempo, a transação não deve afetar outras operações no banco de dados ou em outras transações, e todas as transações parecem estar sendo executadas de forma independente.

Propriedades da transação

As transações têm os seguintes quatro propriedades, geralmente abreviadas como ACID:

  • Atomicidade (Atomicity): A transação é executada como um todo, e todas as operações contidas nelas devem ser executadas ou não executadas.

  • Consistência (Consistency): A transação deve garantir que o estado do banco de dados mude de um estado consistente para outro, onde o estado consistente significa que os dados no banco de dados devem satisfazer as restrições de integridade.

  • Isolamento (Isolation): Quando várias transações são executadas de forma concorrente, a execução de uma transação não deve afetar a execução de outras transações.

  • Durabilidade (Durability): As modificações feitas em uma transação que foi commitada devem ser permanentemente armazenadas no banco de dados.

Exemplo

Alguém precisa usar moeda eletrônica para comprar na loja10Ocorre pelo menos duas operações em algo de 0 yuan, incluindo:

  • A conta da pessoa diminui 100 yuan.

  • A conta do lojista aumenta100 yuan.

O sistema de gerenciamento de banco de dados que suporta transações deve garantir que essas duas operações (o "conjunto de transações" inteiro) possam ser concluídas ou canceladas em conjunto, caso contrário, surgirão 10Cenário de desaparecimento ou aparecimento de 0 yuan.

Controle de transação

Use os seguintes comandos para controlar as transações:

  • BEGIN TRANSACTION: Iniciar uma transação.

  • COMMIT: Confirmar a transação, ou pode usar o comando END TRANSACTION.

  • ROLLBACK: Reverter a transação.

Os comandos de controle de transação são usados apenas com INSERT, UPDATE e DELETE. Eles não podem ser usados na criação ou exclusão de tabelas, pois essas operações são automaticamente commitadas no banco de dados.

Comando BEGIN TRANSACTION

As transações podem ser iniciadas com o comando BEGIN TRANSACTION ou simplesmente BEGIN. Este tipo de transação geralmente continua até encontrar o próximo comando COMMIT ou ROLLBACK. No entanto, se o banco de dados for fechado ou ocorrer um erro, o processamento de transações também será revertido. Abaixo está a sintaxe simples para iniciar uma transação:

BEGIN;
ou
BEGIN TRANSACTION;

Comando COMMIT

O comando COMMIT é usado para salvar as alterações feitas pela chamada de transação no banco de dados, ou seja, confirmar a transação.

A sintaxe do comando COMMIT é a seguinte:

COMMIT;
ou
END TRANSACTION;

Comando ROLLBACK

O comando ROLLBACK é usado para reverter os comandos de transação não salvos no banco de dados, ou seja, rollback da transação.

A sintaxe do comando ROLLBACK é a seguinte:

ROLLBACK;

Exemplo online

Criar tabela COMPANY(Baixar arquivo SQL da tabela COMPANY ),o conteúdo dos dados é o seguinte:

w3codeboxdb# select * from COMPANY;
 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
(7 rows)

Agora, vamos começar uma transação e excluir age = 25 registros, por fim, usamos o comando ROLLBACK para reverter todas as alterações.

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

Verificar a tabela COMPANY, ainda há 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 começar outra transação, exclua age = 25 registros, por fim, usamos o comando COMMIT para submeter todas as alterações.

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

Verificar a tabela COMPANY, o registro foi excluído:

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)