SQLite - 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, atualizando ou excluindo um registro da tabela, estará 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 SQLite 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 pelo acrônimo 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
A seguir estão os seguintes comandos usados para controlar 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.
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. No entanto, uma transação também será 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;
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 seguir está a sintaxe do comando COMMIT.
COMMIT;
or
END TRANSACTION;
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 seguir está a sintaxe do comando ROLLBACK.
ROLLBACK;
Example
Considere a tabela COMPANY com os seguintes registros.
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Agora, vamos iniciar uma transação e deletar os registros da tabela com idade = 25. Então, use o comando ROLLBACK para desfazer todas as mudanças.
sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;
Agora, se você verificar a tabela COMPANY, ela ainda terá os seguintes registros -
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Vamos iniciar outra transação e deletar os registros da tabela com idade = 25 e finalmente usar o comando COMMIT para confirmar todas as mudanças.
sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;
Se você verificar agora a tabela COMPANY ainda tem os seguintes registros -
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0