Transações (Base de Dados)
Tags: sql, database, programming, mysql
Published: 2022-09-05 07:21:01


**Transação** é uma sequência de operações num sistema de gerência de banco de dados que são tratadas como um bloco único e atômico durante uma recuperação de falhas e também prover isolamento entre acessos concorrentes na mesma massa de dados.


## Conceitos importantes
**Transação**: Sequência operações de uma sessão.
**Sessão**: Diálogo, comunicação ou conexão de uma aplicação com uma base de dados relacional.


A maioria dos SGBDs estão preparados para lidar com concorrência sobre uma BD. Eles permitem várias sessões simultâneas e independentes sobre uma BD. Nesses SGBDs  várias sessões podem executar muitas operações sobre a BD.

As transações são usadas para as operações que alteram a base de dados, nomeadamente a inserção, actualização e exclusão de dados.


## Propriedades desejáveis para uma transação (ACID)
- Atomicidade: Tem efeito atómico. As suas operações ou completam todas num único momento logicamente “instantâneo” ou não têm qualquer efeito;
- Consistência: Deixa o estado da BD num estado consistente, respeitando as restrições de integridade;
- Isolamento: Não é afectada por transações concorrentes;
- Durabilidde: O estado da BD resultante da transação é persistente após esta ter terminado.
Alguns Exemplos de transações
- Transferências Bancárias;
- Movimentação de dados de um lugar para outro (inserir dados de uma tabela para outra);
- Alteração de grandes quantidades de dados.


## Factores que Afectam as transações
A realização de uma operação pode ser afectada por vários factores:
- As ligações de Rede; 
- As falhas de Energia Eléctrica;
- Problemas na máquina ou ambiente computacional (Memória, Disco e Processador).


## Vantagens das Transações
- Permitem lidar com processamentos pesados e críticos de maneira segura;
- Recuperam as alterações se ocorrer uma exceção ou a lógica de negócios precisar desfazer mudanças de estado;
- Para aplicar várias alterações como uma unidade atômica no momento commit;
- Mantêm e liberam bloqueios em dados para aplicar múltiplas alterações como uma unidade atômica no momento da consolidação;
- Protegem um encadeamento de alterações concorrentes;
- Implementam um ciclo de vida para bloqueios em mudanças;
- Produzem uma unidade atômica de replicação.


## Exemplo
 Criação de um procedimento para transferência entre 2 contas bancárias.
Cada conta é associada  a um Cliente e um cliente pode possuir várias contas.
**Linguagem**: SQL
**SGBD**: MySQL


Transações
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tywq54dck388i8pjsgdn.jpg)

Execução de uma transação
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rvniw56fl34otk5lhakl.jpg)

Modelo lógico
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u5scuovs033ifxr1bc50.jpg)

Modelo físico
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ry2dc48odv7ayijofpx.jpg)

Procedimento para Transferir
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hafch8b2uaaesjbj3lky.jpg)

Chamada do procedimento
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8iksx284k1le0x6rz09b.jpg)