Si vous êtes data analyst, vous travaillez souvent en lecture seule, mais comprendre les transactions est essentiel car elles garantissent l’intégrité et la cohérence des données, surtout quand plusieurs opérations ou utilisateurs accèdent à la même base en parallèle. Sans elles on risque de conflits, d’incohérences et de corruption.

Propriétés ACID

Les transactions ont quatre propriétés importantes, résumées par l’acronyme ACID :

  • Atomicité : soit toutes les opérations réussissent, soit aucune n’est appliquée. En cas de problème, on annule tout et on revient à l’état d’avant.
  • Cohérence : après une transaction réussie, la base de données reste correcte et respecte toutes ses règles.
  • Isolation : chaque transaction se déroule comme si elle était seule, sans être perturbée par les autres.
  • Durabilité : une fois la transaction validée, les changements sont enregistrés et restent, même en cas de panne du système.

Les commandes transactionnelles s’appliquent aux commandes suivantes : INSERT, UPDATE, MERGE, DELETE.
Les commandes DDL (création/suppression de tables) sont auto-validées.

  • BEGIN TRANSACTION <nom> : démarre une transaction explicite.
  • COMMIT : valide définitivement toutes les modifications.
  • ROLLBACK : annule toutes les modifications depuis le début ou jusqu’à un SAVEPOINT.
  • SAVEPOINT <nom> : point de retour intermédiaire.
  • ROLLBACK TO <nom> : revient à un SAVEPOINT donné.
  • RELEASE SAVEPOINT <nom> : supprime un SAVEPOINT (on ne peut plus y revenir).
  • SET TRANSACTION : définit les propriétés de la transaction (nom, mode lecture/écriture ou lecture seule) :
    • SET TRANSACTION READ WRITE
    • SET TRANSACTION READ ONLY

Prenons un exemple pour mieux comprendre le concept.

On va créer une table PETS:

CREATE TABLE PETS (
   ID INT NOT NULL,
   PET_NAME VARCHAR(20) NOT NULL,
   PET_AGE INT NOT NULL,
   OWNER_NAME VARCHAR(25),
   PET_TYPE VARCHAR(10),
   PRIMARY KEY (ID)
);

Insertion des données :

INSERT INTO PETS VALUES 
(1, 'ROCKY', 4, 'John', 'Dog'),
(2, 'TITI', 2, 'Emma', 'Cat'),
(3, 'MIMI', 1, 'Sophia', 'Bird');

COMMIT (valider)

BEGIN TRANSACTION;
DELETE FROM PETS WHERE PET_TYPE = 'Cat';
COMMIT;

Après COMMIT, les chats supprimés ne réapparaissent plus.


ROLLBACK (annuler)

DELETE FROM PETS WHERE PET_NAME = 'Buddy';
ROLLBACK;

La suppression de Buddy est annulée, il revient dans la table.


SAVEPOINT + ROLLBACK TO (annuler partiellement)

SAVEPOINTREMOVE_MITTENS;
DELETE FROM PETS WHERE PET_NAME = 'Mittens';

SAVEPOINT REMOVE_TWEETY;
DELETE FROM PETS WHERE PET_NAME = 'Tweety';

ROLLBACK TO REMOVE_TWEETY;

On revient à l’état du SAVEPOINT REMOVE_TWEETY : Mittens reste supprimée, Tweety est restauré.


RELEASE SAVEPOINT

RELEASE SAVEPOINT REMOVE_TWEETY;

On ne peut plus faire ROLLBACK TO REMOVE_TWEETY.

Ces mécanismes permettent de contrôler précisément quelles modifications sont conservées ou annulées dans une base de données.