T-SQL - Transações

UMA transactioné 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á 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.

Na prática, 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 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

Existem os seguintes comandos usados ​​para controlar as transações -

  • COMMIT - Para salvar as alterações.

  • ROLLBACK - Para reverter as alterações.

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

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

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.

Para usar comandos de controle transacional no MS SQL Server, temos que começar a transação com 'begin tran' ou o comando begin transaction, caso contrário, esses comandos não funcionarão.

Comando COMMIT

O comando COMMIT é o comando transacional usado para salvar as alterações invocadas por uma transação no banco de dados. Este comando salva todas as transações no banco de dados desde o último comando COMMIT ou ROLLBACK.

Sintaxe

A seguir está a sintaxe do comando COMMIT.

COMMIT;

Exemplo

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 exemplo de comando a seguir irá deletar registros da tabela com idade = 25 e então COMMIT as mudanças no banco de dados.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT

Como resultado, duas linhas da tabela seriam excluídas e a instrução SELECT produzirá a seguinte saída.

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

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 que o último comando COMMIT ou ROLLBACK foi emitido.

Sintaxe

A seguir está a sintaxe do comando ROLLBACK.

ROLLBACK

Exemplo

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 exemplo de comando a seguir excluirá os registros da tabela com idade = 25 e, em seguida, ROLLBACK as alterações no banco de dados.

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

Como resultado, a operação de exclusão não afetará a tabela e a instrução SELECT produzirá 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

Comando SAVEPOINT

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.

Sintaxe

A seguir está a sintaxe do comando SAVEPOINT.

SAVE TRANSACTION SAVEPOINT_NAME

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

A seguir está a sintaxe para reverter para um SAVEPOINT.

ROLLBACK TO SAVEPOINT_NAME

No exemplo a seguir, excluiremos três registros diferentes da tabela CUSTOMERS. Teremos que criar um SAVEPOINT antes de cada exclusão, para que possamos ROLLBACK para qualquer SAVEPOINT a qualquer momento para retornar os dados apropriados ao seu estado original.

Exemplo

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á a série de operações -

Begin Tran 
SAVE Transaction SP1 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 1  
1 row deleted. 
SAVE Transaction SP2 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 2 
1 row deleted.
SAVE Transaction SP3 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 3 
1 row deleted.

As três exclusões ocorreram, no entanto, mudamos de ideia e decidimos ROLLBACK para o SAVEPOINT que identificamos como SP2. Como o SP2 foi criado após a primeira exclusão, as duas últimas exclusões foram desfeitas -

ROLLBACK Transaction SP2 
Rollback complete.

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

SELECT * FROM CUSTOMERS

6 linhas selecionadas.

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

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.

Sintaxe

A seguir está a sintaxe para SET TRANSACTION.

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>