SQL - 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 ou atualizando um registro ou excluindo um registro da tabela, então você está realizando uma transação nessa tabela. É importante controlar essas transações para garantir a integridade dos dados e tratar os erros do banco de dados.

Praticamente, você agrupará muitas consultas SQL 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 referidas 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 todas 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ções

Os comandos a seguir são usados ​​para controlar transações.

  • COMMIT - para salvar as alterações.

  • ROLLBACK - para reverter as alterações.

  • SAVEPOINT - cria pontos dentro dos grupos de transações nas quais ROLLBACK.

  • SET TRANSACTION - Coloca um nome em uma transação.

Comandos de controle transacional

Comandos de controle transacional são usados ​​apenas com o DML Commandscomo - INSERT, UPDATE e DELETE apenas. 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 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 é 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;

Example

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo que excluiria os registros da tabela que têm idade = 25 e, em seguida, COMMIT as alterações no banco de dados.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

Portanto, duas linhas da tabela seriam excluídas e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O comando ROLLBACK

O comando ROLLBACK é o comando transacional usado para desfazer transações que ainda não foram salvas no banco de dados. Este comando só pode ser usado para desfazer transações desde o último comando COMMIT ou ROLLBACK foi emitido.

A sintaxe para um comando ROLLBACK é a seguinte -

ROLLBACK;

Example

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo, que excluiria os registros da tabela que têm idade = 25 e, em seguida, ROLLBACK as alterações no banco de dados.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

Portanto, a operação de exclusão não impactaria a tabela e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O Comando SAVEPOINT

Um SAVEPOINT é um ponto em uma transação em que você pode reverter a transação para um determinado ponto sem reverter toda a transação.

A sintaxe para um comando SAVEPOINT é mostrada abaixo.

SAVEPOINT SAVEPOINT_NAME;

Este comando serve apenas na criação de um SAVEPOINT entre todas as instruções transacionais. O comando ROLLBACK é usado para desfazer um grupo de transações.

A sintaxe para reverter para um SAVEPOINT é mostrada abaixo.

ROLLBACK TO SAVEPOINT_NAME;

A seguir está um exemplo em que você planeja excluir os três registros diferentes da tabela CUSTOMERS. Você deseja criar um SAVEPOINT antes de cada exclusão, de forma que possa ROLLBACK para qualquer SAVEPOINT a qualquer momento para retornar os dados apropriados ao seu estado original.

Example

Considere a tabela CUSTOMERS com os seguintes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O seguinte bloco de código contém a série de operações.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Agora que as três exclusões ocorreram, vamos supor que você mudou de ideia e decidiu ROLLBACK para o SAVEPOINT que você identificou como SP2. Como o SP2 foi criado após a primeira exclusão, as duas últimas exclusões foram desfeitas -

SQL> ROLLBACK TO SP2;
Rollback complete.

Observe que apenas a primeira exclusão ocorreu desde a reversão para o SP2.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

O comando RELEASE SAVEPOINT

O comando RELEASE SAVEPOINT é usado para remover um SAVEPOINT que você criou.

A sintaxe para um comando RELEASE SAVEPOINT é a seguinte.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Uma vez que um SAVEPOINT tenha sido liberado, você não pode mais usar o comando ROLLBACK para desfazer transações realizadas desde o último SAVEPOINT.

O comando SET TRANSACTION

O comando SET TRANSACTION pode ser usado para iniciar uma transação do banco de dados. Este comando é usado para especificar características para a transação que se segue. Por exemplo, você pode especificar uma transação para ser somente leitura ou leitura e gravação.

A sintaxe para um comando SET TRANSACTION é a seguinte.

SET TRANSACTION [ READ WRITE | READ ONLY ];