Bonjour, si vous êtes data analyst, vous travaillez souvent en lecture seule, mais comprendre les transactions est essentiel : 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 : risques 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.