Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Isolation. Niveaux Read Committed et Uncommitted | Acid
Techniques Avancées en SQL

bookIsolation. Niveaux Read Committed et Uncommitted

Dans le contexte des bases de données, l'isolation fait référence à la capacité d'un système de gestion de base de données à contrôler la visibilité des modifications effectuées par des transactions concurrentes. Elle garantit que les transactions fonctionnent de manière indépendante les unes des autres, évitant toute interférence et maintenant l'intégrité des données.

Il existe 4 niveaux d'isolation en SQL :

  • read uncommitted ;
  • read committed ;
  • repeatable read ;
  • serializable.

Read uncommitted

Il s'agit du niveau d'isolation le plus bas, où les transactions peuvent voir les modifications effectuées par d'autres transactions même avant qu'elles ne soient validées. Ce niveau autorise les lectures sales (dirty reads), ce qui signifie qu'une transaction peut lire des données qui ont été modifiées par une autre transaction mais qui ne sont pas encore validées.

Lectures sales

Implémentation

Pour spécifier le niveau d'isolation d'une transaction, nous pouvons utiliser la commande suivante dans notre requête :

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; : Cette instruction modifie le niveau d'isolation de la transaction en cours à "Read Uncommitted", permettant à la transaction de lire potentiellement des données modifiées par d'autres transactions non validées ;

  • cette commande doit être utilisée uniquement à l'intérieur du bloc de transaction ! Sinon, elle n'aura aucun effet et le niveau d'isolation par défaut sera utilisé.

Nous pouvons également vérifier le niveau d'isolation actuel à l'aide de la commande suivante :
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Le niveau d'isolation Read Committed garantit qu'une transaction ne voit que les données qui ont été validées par d'autres transactions.
Cela signifie que les modifications non validées effectuées par d'autres transactions ne sont pas visibles pour les transactions fonctionnant sous l'isolation Read Committed.
En conséquence, cela empêche les lectures sales en permettant à une transaction de lire uniquement des données validées. Cependant, ce niveau d'isolation présente des problèmes de lectures non répétables.

Lectures non répétables

Le niveau d'isolation « Read committed » permet des lectures non répétables car il verrouille l'opération de lecture sur les valeurs en cours de transactions non validées mais ne verrouille pas l'opération d'écriture.
En conséquence, il est possible d'écrire de nouvelles données dans la ligne qui est actuellement lue par une autre transaction.

Mise à jour perdue

En raison de l'absence de verrouillage en écriture, il existe un autre problème avec le niveau d'isolation read committed : les mises à jour perdues.

Les mises à jour perdues se produisent lorsque deux transactions parallèles tentent de modifier la même ligne. En conséquence, la transaction validée en dernier écrase les valeurs validées par les autres transactions.

Mise en œuvre

Nous pouvons également spécifier ce niveau d'isolation à l'aide des commandes suivantes :

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Il est important de noter que Read Committed est le niveau d'isolation par défaut pour la plupart des systèmes de gestion de bases de données, c'est pourquoi il est possible de ne pas le spécifier.

question mark

Si une transaction lit des données qui ont été modifiées par une autre transaction non validée, de quel type de lecture s'agit-il ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 6

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 4.35

bookIsolation. Niveaux Read Committed et Uncommitted

Glissez pour afficher le menu

Dans le contexte des bases de données, l'isolation fait référence à la capacité d'un système de gestion de base de données à contrôler la visibilité des modifications effectuées par des transactions concurrentes. Elle garantit que les transactions fonctionnent de manière indépendante les unes des autres, évitant toute interférence et maintenant l'intégrité des données.

Il existe 4 niveaux d'isolation en SQL :

  • read uncommitted ;
  • read committed ;
  • repeatable read ;
  • serializable.

Read uncommitted

Il s'agit du niveau d'isolation le plus bas, où les transactions peuvent voir les modifications effectuées par d'autres transactions même avant qu'elles ne soient validées. Ce niveau autorise les lectures sales (dirty reads), ce qui signifie qu'une transaction peut lire des données qui ont été modifiées par une autre transaction mais qui ne sont pas encore validées.

Lectures sales

Implémentation

Pour spécifier le niveau d'isolation d'une transaction, nous pouvons utiliser la commande suivante dans notre requête :

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; : Cette instruction modifie le niveau d'isolation de la transaction en cours à "Read Uncommitted", permettant à la transaction de lire potentiellement des données modifiées par d'autres transactions non validées ;

  • cette commande doit être utilisée uniquement à l'intérieur du bloc de transaction ! Sinon, elle n'aura aucun effet et le niveau d'isolation par défaut sera utilisé.

Nous pouvons également vérifier le niveau d'isolation actuel à l'aide de la commande suivante :
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Le niveau d'isolation Read Committed garantit qu'une transaction ne voit que les données qui ont été validées par d'autres transactions.
Cela signifie que les modifications non validées effectuées par d'autres transactions ne sont pas visibles pour les transactions fonctionnant sous l'isolation Read Committed.
En conséquence, cela empêche les lectures sales en permettant à une transaction de lire uniquement des données validées. Cependant, ce niveau d'isolation présente des problèmes de lectures non répétables.

Lectures non répétables

Le niveau d'isolation « Read committed » permet des lectures non répétables car il verrouille l'opération de lecture sur les valeurs en cours de transactions non validées mais ne verrouille pas l'opération d'écriture.
En conséquence, il est possible d'écrire de nouvelles données dans la ligne qui est actuellement lue par une autre transaction.

Mise à jour perdue

En raison de l'absence de verrouillage en écriture, il existe un autre problème avec le niveau d'isolation read committed : les mises à jour perdues.

Les mises à jour perdues se produisent lorsque deux transactions parallèles tentent de modifier la même ligne. En conséquence, la transaction validée en dernier écrase les valeurs validées par les autres transactions.

Mise en œuvre

Nous pouvons également spécifier ce niveau d'isolation à l'aide des commandes suivantes :

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Il est important de noter que Read Committed est le niveau d'isolation par défaut pour la plupart des systèmes de gestion de bases de données, c'est pourquoi il est possible de ne pas le spécifier.

question mark

Si une transaction lit des données qui ont été modifiées par une autre transaction non validée, de quel type de lecture s'agit-il ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 6
some-alt