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.
- 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).
- 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.
- 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.
- 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
- Utilitzar LIKE per a coincidències de patrons
- Operadors IN i BETWEEN
- Valors NULL i IS NULL
- Agrupar dades amb GROUP BY
- Clàusula HAVING
Mòdul 5: Manipulació de dades
Mòdul 6: Funcions avançades de SQL
Mòdul 7: Subconsultes i consultes niades
- Introducció a les subconsultes
- Subconsultes correlacionades
- EXISTS i NOT EXISTS
- Utilitzar subconsultes en les clàusules SELECT, FROM i WHERE
Mòdul 8: Índexs i optimització del rendiment
- Comprendre els índexs
- Crear i gestionar índexs
- Tècniques d'optimització de consultes
- Analitzar el rendiment de les consultes
Mòdul 9: Transaccions i concurrència
- Introducció a les transaccions
- Propietats ACID
- Instruccions de control de transaccions
- Gestionar la concurrència
Mòdul 10: Temes avançats
Mòdul 11: SQL en la pràctica
- Casos d'ús del món real
- Millors pràctiques
- SQL per a l'anàlisi de dades
- SQL en el desenvolupament web