Les propietats ACID són un conjunt de principis que garanteixen la fiabilitat de les transaccions en bases de dades. ACID és un acrònim que representa Atomicitat, Consistència, Aïllament i Durabilitat. Aquestes propietats asseguren que les transaccions es realitzin de manera segura i que la integritat de les dades es mantingui fins i tot en cas de fallades del sistema.

  1. Atomicitat

Definició

L'atomicitat garanteix que una transacció es realitzi completament o no es realitzi en absolut. Això significa que si alguna part de la transacció falla, tota la transacció es desfa i la base de dades es retorna al seu estat anterior a la transacció.

Exemple

BEGIN TRANSACTION;

-- Intentem inserir una nova fila a la taula 'clients'
INSERT INTO clients (id, nom, email) VALUES (1, 'Joan', '[email protected]');

-- Intentem actualitzar una fila a la taula 'comandes'
UPDATE comandes SET estat = 'enviat' WHERE id = 100;

-- Si alguna de les operacions falla, es desfa la transacció
IF @@ERROR <> 0
BEGIN
    ROLLBACK TRANSACTION;
END
ELSE
BEGIN
    COMMIT TRANSACTION;
END

Explicació

En aquest exemple, si qualsevol de les instruccions SQL dins de la transacció falla, la transacció es desfa (ROLLBACK) i la base de dades es retorna al seu estat anterior. Si totes les instruccions s'executen correctament, la transacció es confirma (COMMIT).

  1. Consistència

Definició

La consistència assegura que una transacció porta la base de dades d'un estat vàlid a un altre estat vàlid. Això significa que qualsevol transacció només pot deixar la base de dades en un estat coherent, on totes les regles i restriccions de la base de dades es compleixen.

Exemple

BEGIN TRANSACTION;

-- Inserim una nova comanda
INSERT INTO comandes (id, client_id, import_total) VALUES (101, 1, 200);

-- Actualitzem el saldo del client
UPDATE clients SET saldo = saldo - 200 WHERE id = 1;

-- Si alguna de les operacions viola una restricció, es desfa la transacció
IF @@ERROR <> 0
BEGIN
    ROLLBACK TRANSACTION;
END
ELSE
BEGIN
    COMMIT TRANSACTION;
END

Explicació

En aquest exemple, la transacció assegura que el saldo del client es redueix correctament quan es crea una nova comanda. Si alguna de les operacions viola una restricció (per exemple, saldo negatiu), la transacció es desfa per mantenir la consistència de la base de dades.

  1. Aïllament

Definició

L'aïllament garanteix que les transaccions concurrentes no interfereixin entre elles. Cada transacció es realitza com si fos l'única en execució, evitant així problemes com lectures brutes, lectures no repetibles i fantasmes.

Nivells d'aïllament

  • Read Uncommitted: Permet lectures brutes.
  • Read Committed: Evita lectures brutes.
  • Repeatable Read: Evita lectures no repetibles.
  • Serializable: Evita lectures no repetibles i fantasmes.

Exemple

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

-- Seleccionem el saldo del client
SELECT saldo FROM clients WHERE id = 1;

-- Actualitzem el saldo del client
UPDATE clients SET saldo = saldo - 200 WHERE id = 1;

COMMIT TRANSACTION;

Explicació

En aquest exemple, el nivell d'aïllament SERIALIZABLE assegura que cap altra transacció pot modificar el saldo del client mentre aquesta transacció està en execució, evitant així lectures no repetibles i fantasmes.

  1. Durabilitat

Definició

La durabilitat assegura que una vegada una transacció es confirma (COMMIT), els seus canvis es conserven permanentment, fins i tot en cas de fallades del sistema.

Exemple

BEGIN TRANSACTION;

-- Inserim una nova comanda
INSERT INTO comandes (id, client_id, import_total) VALUES (102, 1, 150);

-- Confirmem la transacció
COMMIT TRANSACTION;

Explicació

En aquest exemple, una vegada que la transacció es confirma, la nova comanda es guarda permanentment a la base de dades. Fins i tot si el sistema falla immediatament després, els canvis realitzats per la transacció es conserven.

Resum

Les propietats ACID són fonamentals per garantir la fiabilitat i la integritat de les transaccions en bases de dades. Aquests principis asseguren que les transaccions es realitzin de manera segura, coherent i duradora, fins i tot en entorns amb múltiples usuaris i possibles fallades del sistema. Comprendre i aplicar aquestes propietats és essencial per a qualsevol desenvolupador que treballi amb bases de dades.

Curs de SQL

Mòdul 1: Introducció a SQL

Mòdul 2: Consultes bàsiques de SQL

Mòdul 3: Treballar amb múltiples taules

Mòdul 4: Filtratge avançat de dades

Mòdul 5: Manipulació de dades

Mòdul 6: Funcions avançades de SQL

Mòdul 7: Subconsultes i consultes niades

Mòdul 8: Índexs i optimització del rendiment

Mòdul 9: Transaccions i concurrència

Mòdul 10: Temes avançats

Mòdul 11: SQL en la pràctica

Mòdul 12: Projecte final

© Copyright 2024. Tots els drets reservats