Contenu du cours
Techniques Avancées en SQL
Techniques Avancées en SQL
Isolement. Niveaux de Lecture Validée et Non Validée
Dans le contexte des bases de données, l'isolation fait référence à la capacité d'un système de base de données à contrôler la visibilité des modifications apportées par des transactions concurrentes. Elle garantit que les transactions fonctionnent de manière indépendante les unes des autres, évitant les interférences et maintenant l'intégrité des données.
Il existe 4 niveaux d'isolation en SQL :
- lecture non validée ;
- lecture validée ;
- lecture répétable ;
- sérialisable.
Lecture non validée
C'est le niveau d'isolation le plus bas où les transactions peuvent voir les modifications apportées par d'autres transactions même avant qu'elles ne soient validées. Ce niveau permet les lectures sales, ce qui signifie qu'une transaction peut lire des données qui ont été modifiées par une autre transaction mais pas encore validées.
Lectures sales
Mise en œuvre
Pour spécifier le niveau d'isolation pour la transaction, nous pouvons utiliser la commande suivante dans notre requête :
-
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
: Cette instruction modifie le niveau d'isolation pour la transaction en cours à "Read Uncommitted", permettant potentiellement à la transaction de lire 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 un niveau d'isolation par défaut sera utilisé.
Nous pouvons également vérifier le niveau d'isolation actuel en utilisant la commande suivante :
SHOW TRANSACTION ISOLATION LEVEL;
Lecture validée
Le niveau d'isolation Lecture Validée 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 opérant sous l'isolation Lecture Validée.
En conséquence, il empêche les lectures sales en permettant à une transaction de lire uniquement des données validées. Cependant, ce niveau de transaction a des problèmes avec les 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 qui sont en cours de transactions non validées mais ne verrouille pas l'opération d'écriture.
En conséquence, nous pouvons é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 d'écriture, il y a 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 qui est validée plus tard écrase les valeurs validées par d'autres transactions.
Mise en œuvre
Nous pouvons également spécifier ce niveau d'isolation en utilisant les commandes suivantes :
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 nous pouvons éviter de le spécifier.
Merci pour vos commentaires !