ACID é um conceito (e um acrónimo) que se refere às quatro propriedades de uma transacção num sistema de base de dados, que são: Atomicidade, Consistência, Isolamento e Durabilidade. Estas propriedades garantem a precisão e integridade dos dados na base de dados, assegurando que os dados não se tornam corruptos como resultado de alguma falha, garantindo a validade dos dados mesmo quando ocorrem erros ou falhas.
As propriedades ACID permitem-nos escrever aplicações sem considerar a complexidade do ambiente onde a aplicação é executada. Isto é essencial para o processamento de transacções em bases de dados. Devido às propriedades ACID, podemos concentrar-nos na lógica da aplicação em vez de falhas, recuperação e sincronização dos dados.
Transacção
P>Antes de explicar as quatro propriedades ACID, precisamos de compreender o que é uma transacção. Uma transacção é uma sequência de operações que são executadas como uma única unidade de trabalho, e uma transacção pode consistir em uma ou várias etapas. Uma transacção acede a dados usando operações de leitura e escrita.
Cada transacção é um grupo de operações que actua como uma única unidade, produz resultados consistentes, actua isoladamente de outras operações e as actualizações que faz são armazenadas de forma duradoura.
O objectivo de uma transacção é preservar a integridade e consistência dos dados. Se uma transacção for bem sucedida, os dados que foram modificados durante a transacção serão guardados na base de dados. Se algum erro ocorrer e precisar de ser cancelado ou revertido, as alterações que foram feitas nos dados não serão aplicadas.
Quando trabalhamos com uma base de dados, executamos declarações SQL, e essas operações são geralmente executadas em blocos, e esses blocos são as transacções. Permitem inserir, actualizar, apagar, procurar dados, etc..
Por exemplo, a transferência de dinheiro entre contas bancárias é uma transacção, o que ocorrerá neste caso é que o valor deve ser debitado de uma conta e creditado noutra conta.
Atomicidade
Uma transacção deve ser uma unidade atómica de trabalho, o que significa que todos os dados modificados são executados ou nenhum deles será. A transacção deve ser completamente executada ou falhar completamente, se uma parte da transacção falhar, toda a transacção falhará. Isto proporciona fiabilidade porque se houver uma falha no meio de uma transacção, nenhuma das alterações nessa transacção será comprometida.
Por exemplo, numa transacção financeira, o dinheiro sai da conta A e vai para a conta B, ambas as operações devem ser executadas em conjunto, e se uma delas falhar, a outra não será executada. Assim, a transacção é tratada como uma única entidade, como um único comando. Uma transacção pode ter mais de duas operações, mas será sempre executada todas elas ou nenhuma. Neste exemplo, quando o dinheiro está a ser transferido da conta A para a conta B, se alguma coisa falhar, toda a transacção será abortada e será retrocedida.
Consistência
Esta propriedade assegura que a transacção mantém as restrições de integridade dos dados, deixando os dados consistentes. A transacção cria um novo estado válido dos dados e, se alguma falha acontecer, devolver todos os dados com o estado antes da transacção ser executada.
O objectivo é assegurar que a base de dados antes e depois da transacção seja consistente. Se uma transacção deixar dados num estado inválido, a transacção é abortada e é comunicado um erro.
Os dados que são guardados na base de dados devem ser sempre válidos (os dados serão válidos de acordo com regras definidas, incluindo quaisquer restrições, cascatas, e gatilhos que tenham sido aplicados na base de dados), desta forma evita-se a corrupção da base de dados que pode ser causada por uma transacção ilegal. Por exemplo, se tentarmos adicionar um registo numa tabela de vendas com o código de um produto que não existe na tabela de produtos, a transacção falhará. Outro exemplo, se tiver uma coluna que não permita números negativos, e tentar adicionar ou modificar um registo, utilizando um valor inferior a zero nesta coluna, a transacção falhará.
Isolamento
Esta propriedade assegura o isolamento de cada transacção, assegurando que a transacção não será alterada por qualquer outra transacção concorrente. Isto significa que cada transacção em curso não será interferida por nenhuma outra transacção até estar concluída.
Por exemplo, se dois clientes estiverem a tentar comprar ao mesmo tempo o último produto disponível no website, quando o primeiro utilizador terminar a compra, fará com que a transacção do outro utilizador seja interrompida.
Durabilidade
A partir do momento em que uma transacção é concluída e comprometida, as suas alterações persistem permanentemente na base de dados. Esta propriedade assegura que a informação que é guardada na base de dados é imutável até que outra actualização ou transacção de eliminação a afecte.
A partir do momento em que a transacção é efectuada, ela permanecerá neste estado mesmo que ocorra um problema grave, tal como uma falha ou uma queda de energia. Para este efeito, as transacções concluídas são registadas em dispositivos de memória permanente (não voláteis), tais como discos rígidos, pelo que os dados estarão sempre disponíveis, mesmo que a instância da BD seja reiniciada.
Conclusão
As propriedades do ACID garantem a integridade e a consistência dos dados na base de dados, assegurando que os dados não se tornam corruptos em resultado de alguma falha. As bases de dados que aplicam as propriedades ACID garantirão que apenas as transacções que foram completamente bem sucedidas serão processadas, e se alguma falha acontecer antes de uma transacção ser concluída, os dados não serão alterados.