Niveaux d'isolation des transactions dans Babelfish - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Niveaux d'isolation des transactions dans Babelfish

Babelfish supporte les niveaux d'isolation des transactions READ UNCOMMITTED, READ COMMITTED et SNAPSHOT. À partir de la version 3.4 de Babelfish, des niveaux d'isolation supplémentaires (REPEATABLE READ et SERIALIZABLE) sont pris en charge. Tous les niveaux d'isolation de Babelfish sont pris en charge avec le comportement des niveaux d'isolation correspondants dans PostgreSQL. SQL Server et Babelfish utilisent différents mécanismes sous-jacents pour implémenter les niveaux d'isolation des transactions (blocage des accès simultanés, verrous liés aux transactions, gestion des erreurs, etc.). De plus, il existe des différences subtiles dans la manière dont l'accès simultané peut fonctionner pour différentes charges de travail. Pour plus d'informations sur ce comportement de PostgreSQL, consultez la section Isolation des transactions.

Vue d'ensemble des niveaux d'isolation des transactions

Les niveaux d'isolation des transactions SQL Server d'origine sont basés sur un verrouillage pessimiste selon lequel une seule copie des données existe et les requêtes doivent verrouiller des ressources telles que des lignes avant d'y accéder. Plus tard, une variante du niveau d'isolation Read Committed a été introduite. Cela permet d'utiliser des versions en ligne pour améliorer la simultanéité entre les lecteurs et les rédacteurs en utilisant un accès non bloquant. En outre, un nouveau niveau d'isolation appelé Snapshot est disponible. Il utilise également des versions en ligne pour offrir une meilleure simultanéité que le niveau d'isolation REPEATABLE READ en évitant le verrouillage partagé des données de lecture conservées jusqu'à la fin de la transaction.

Contrairement à SQL Server, tous les niveaux d'isolation des transactions de Babelfish sont basés sur le verrouillage optimiste (MVCC). Chaque transaction voit un instantané des données soit au début de l'instruction (READ COMMITTED), soit au début de la transaction (REPEATABLE READ, SERIALIZABLE), quel que soit l'état actuel des données sous-jacentes. Par conséquent, le comportement d'exécution des transactions simultanées dans Babelfish peut être différent de celui de SQL Server.

Prenons l'exemple d'une transaction avec le niveau d'isolation SERIALIZABLE qui est initialement bloquée dans SQL Server mais qui aboutit ultérieurement. Il peut échouer dans Babelfish en raison d'un conflit de sérialisation avec une transaction simultanée qui lit ou met à jour les mêmes lignes. Il peut également arriver que l'exécution de plusieurs transactions simultanées produise un résultat final différent dans Babelfish par rapport à SQL Server. Les applications qui utilisent des niveaux d'isolation doivent être testées de manière approfondie pour détecter les scénarios de simultanéité.

Niveaux d'isolation dans SQL Server Niveau d'isolement de Babelfish Niveau d'isolation de PostgreSQL Commentaires

LIRE SANS ENGAGEMENT

LIRE SANS ENGAGEMENT

LIRE SANS ENGAGEMENT

Read Uncommitted est identique à Read Committed dans Babelfish/PostgreSQL

LIRE ENGAGÉ

LIRE ENGAGÉ

LIRE ENGAGÉ

SQL Server Read Committed est basé sur un verrouillage pessimiste, Babelfish Read Committed est basé sur un snapshot (MVCC).

LIRE UN INSTANTANÉ VALIDÉ

LIRE ENGAGÉ

LIRE ENGAGÉ

Les deux sont basés sur des instantanés (MVCC) mais ils ne sont pas exactement identiques.

INSTANTANÉ

INSTANTANÉ

LECTURE RÉPÉTABLE

Exactement pareil.

LECTURE RÉPÉTABLE

LECTURE RÉPÉTABLE

LECTURE RÉPÉTABLE

SQL Server Repeatable Read est basé sur le verrouillage pessimiste, Babelfish Repeatable Read est basé sur des snapshots (MVCC).

SERIALIZABLE

SERIALIZABLE

SERIALIZABLE

SQL Server Serializable est un isolement pessimiste, Babelfish Serializable est basé sur un snapshot (MVCC).

Note

Les indices de tableau ne sont actuellement pas pris en charge et leur comportement est contrôlé à l'aide de la trappe d'échappement prédéfinie de Babelfish. escape_hatch_table_hints

Configuration des niveaux d'isolation des transactions

Utilisez la commande suivante pour définir le niveau d'isolation des transactions :

SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE }

Activation ou désactivation des niveaux d'isolation des transactions

Les niveaux d'isolation des transactions REPEATABLE READ et SERIALIZABLE sont désactivés par défaut dans Babelfish et vous devez les activer explicitement en réglant l'utilisation de la trappe babelfishpg_tsql.isolation_level_serializable ou babelfishpg_tsql.isolation_level_repeatable_read de la trappe d'échappement. pg_isolation sp_babelfish_configure Pour plus d'informations, consultez Gestion du traitement des erreurs Babelfish avec des trappes de secours.

Vous trouverez ci-dessous des exemples d'activation ou de désactivation de l'utilisation de REPEATABLE READ et SERIALIZABLE dans la session en cours en définissant leurs trappes d'échappement respectives. Incluez éventuellement un server paramètre pour définir la trappe d'échappement pour la session en cours ainsi que pour toutes les nouvelles sessions suivantes.

Pour activer l'utilisation de SET TRANSACTION ISOLATION LEVEL REPEATABLE READ uniquement dans la session en cours.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation'

Pour permettre l'utilisation de SET TRANSACTION ISOLATION LEVEL REPEATABLE READ dans la session en cours et dans toutes les nouvelles sessions ultérieures.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'pg_isolation', 'server'

Pour désactiver l'utilisation de SET TRANSACTION ISOLATION LEVEL REPEATABLE READ dans la session en cours et dans les nouvelles sessions suivantes.

EXECUTE sp_babelfish_configure 'isolation_level_repeatable_read', 'off', 'server'

Pour activer l'utilisation de SET TRANSACTION ISOLATION LEVEL SERIALIZABLE uniquement dans la session en cours.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation'

Pour permettre l'utilisation de SET TRANSACTION ISOLATION LEVEL SERIALIZABLE dans la session en cours et dans toutes les nouvelles sessions ultérieures.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'pg_isolation', 'server'

Pour désactiver l'utilisation de SET TRANSACTION ISOLATION LEVEL SERIALIZABLE dans la session en cours et dans les nouvelles sessions ultérieures.

EXECUTE sp_babelfish_configure 'isolation_level_serializable', 'off', 'server'

Différences entre les niveaux d'isolation de Babelfish et de SQL Server

Vous trouverez ci-dessous quelques exemples illustrant les nuances de la manière dont SQL Server et Babelfish implémentent les niveaux d'isolation ANSI.

Note
  • Niveau d'isolation Repeatable Read et Snapshot sont les mêmes dans Babelfish.

  • Le niveau d'isolation Read Uncommitted et Read Committed sont les mêmes dans Babelfish.

L'exemple suivant montre comment créer la table de base pour tous les exemples mentionnés ci-dessous :

CREATE TABLE employee ( id sys.INT NOT NULL PRIMARY KEY, name sys.VARCHAR(255)NOT NULL, age sys.INT NOT NULL ); INSERT INTO employee (id, name, age) VALUES (1, 'A', 10); INSERT INTO employee (id, name, age) VALUES (2, 'B', 20); INSERT INTO employee (id, name, age) VALUES (3, 'C', 30);

BABELFISH READ UNCOMMITTED VS SQL SERVER READ UNCOMMITTED NIVEAU D'ISOLATION

LECTURES SALES DANS LE SERVEUR SQL
Transaction 1 Transaction 2 Lecture non validée de SQL Server Babelfish Read Non engagé

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE NON VALIDÉE) ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE NON VALIDÉE) ;

METTRE À JOUR l'âge de l'employé SET = 0 ;

Mise à jour réussie.

Mise à jour réussie.

INSÉRER DANS LES VALEURS DES EMPLOYÉS (4, « D », 40) ;

L'insertion est réussie.

L'insertion est réussie.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La transaction 1 peut voir les modifications non validées par rapport à la transaction 2.

Identique à Read Committed dans Babelfish. Les modifications non validées par rapport à la transaction 2 ne sont pas visibles pour la transaction 1.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

Permet de voir les modifications validées par Transaction 2.

Permet de voir les modifications validées par Transaction 2.

BABELFISH READ COMMITTED VS SQL SERVER READ COMMIT NIVEAU D'ISOLATION

BLOCAGE DE LA LECTURE ET DE L'ÉCRITURE
Transaction 1 Transaction 2 Lecture validée pour SQL Server Babelfish Read Committed

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS LUES VALIDÉES ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS LUES VALIDÉES ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

METTRE À JOUR L'EMPLOYÉ SET age=100 WHERE id = 1 ;

Mise à jour réussie.

Mise à jour réussie.

METTRE À JOUR L'ÂGE DE L'EMPLOYÉ DÉFINIR = 0 OÙ L'ÂGE EST INDIQUÉ (SÉLECTIONNEZ LE MAXIMUM (âge) DE L'employé) ;

Étape bloquée jusqu'à ce que la transaction 2 soit validée.

Les modifications apportées à la transaction 2 ne sont pas encore visibles. Met à jour la ligne avec id=3.

COMMIT

La transaction 2 est validée avec succès. La transaction 1 est désormais débloquée et reçoit la mise à jour de la transaction 2.

La transaction 2 est validée avec succès.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La transaction 1 met à jour la ligne avec un identifiant = 1.

La transaction 1 met à jour la ligne avec un identifiant = 3.

NIVEAU D'ISOLATION DES INSTANTANÉS DE BABELFISH READ COMMITTED VS SQL SERVER READ COMMITTED

COMPORTEMENT DE BLOCAGE SUR LES NOUVELLES LIGNES INSÉRÉES
Transaction 1 Transaction 2 Snapshot validé en lecture de SQL Server Babelfish Read Committed

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS LUES VALIDÉES ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS LUES VALIDÉES ;

INSÉRER DANS LES VALEURS DES EMPLOYÉS (4, « D », 40) ;

METTRE À JOUR l'âge de l'employé SET = 99 ;

L'étape est bloquée jusqu'à ce que la transaction 1 soit validée. La ligne insérée est verrouillée par la transaction 1.

Trois lignes mises à jour. La ligne nouvellement insérée n'est pas encore visible.

COMMIT

Commission réussie. La transaction 2 est désormais débloquée.

Commission réussie.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

Les 4 lignes ont un age = 99.

La ligne avec id = 4 a une valeur d'âge 40 car elle n'était pas visible pour la transaction 2 lors de la requête de mise à jour. Les autres lignes sont mises à jour à age=99.

LECTURE RÉPÉTABLE BABELFISH VS NIVEAU D'ISOLATION DE LECTURE RÉPÉTABLE DU SERVEUR SQL

COMPORTEMENT DE BLOCAGE DE LECTURE/ÉCRITURE
Transaction 1 Transaction 2 Lecture répétable sur SQL Server Lecture répétable Babelfish

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

METTRE À JOUR L'EMPLOYÉ SET NAME='A_TXN1' OÙ id=1 ;

SÉLECTIONNEZ* À PARTIR DE L'IDENTIFIANT DE L'EMPLOYÉ ! = 1 ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La transaction 2 est bloquée jusqu'à ce que la transaction 1 soit validée.

La transaction 2 se déroule normalement.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La mise à jour de la transaction 1 est visible.

La mise à jour de la transaction 1 n'est pas visible.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

voit la mise à jour de la transaction 1.

voit la mise à jour de la transaction 1.

COMPORTEMENT DE BLOCAGE D'ÉCRITURE/ÉCRITURE
Transaction 1 Transaction 2 Lecture répétable sur SQL Server Lecture répétable Babelfish

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

METTRE À JOUR L'EMPLOYÉ SET NAME='A_TXN1' OÙ id=1 ;

METTRE À JOUR L'EMPLOYÉ SET NAME='A_TXN2' OÙ id=1 ;

Transaction 2 bloquée.

Transaction 2 bloquée.

COMMIT

La validation a été effectuée avec succès et la transaction 2 a été débloquée.

La validation a réussi et la transaction 2 échoue avec une erreur. Impossible de sérialiser l'accès en raison d'une mise à jour simultanée.

COMMIT

Commission réussie.

La transaction 2 a déjà été abandonnée.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La ligne avec id=1 porte le nom = 'A_TX2'.

La ligne avec id=1 porte le nom = 'A_TX1'.

LECTURE FANTÔME
Transaction 1 Transaction 2 Lecture répétable sur SQL Server Lecture répétable Babelfish

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

INSÉRER DANS LES VALEURS DES EMPLOYÉS (4, NewRowName « », 20) ;

La transaction 2 se déroule sans aucun blocage.

La transaction 2 se déroule sans aucun blocage.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La ligne nouvellement insérée est visible.

La ligne nouvellement insérée est visible.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La nouvelle ligne insérée par la transaction 2 est visible.

La nouvelle ligne insérée par la transaction 2 n'est pas visible.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La ligne nouvellement insérée est visible.

La ligne nouvellement insérée est visible.

DIFFÉRENTS RÉSULTATS FINAUX
Transaction 1 Transaction 2 Lecture répétable sur SQL Server Lecture répétable Babelfish

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

METTRE À JOUR L'ÂGE DE L'EMPLOYÉ DÉFINIR = 100 ANS EN FONCTION DE L'ÂGE INDIQUÉ (SÉLECTIONNEZ LE MINIMUM (âge) DE L'employé) ;

La transaction 1 met à jour la ligne avec l'identifiant 1.

La transaction 1 met à jour la ligne avec l'identifiant 1.

METTRE À JOUR L'ÂGE DE L'EMPLOYÉ DÉFINIR = 0 OÙ L'ÂGE EST INDIQUÉ (SÉLECTIONNEZ LE MAXIMUM (âge) DE L'employé) ;

La transaction 2 est bloquée car l'instruction SELECT tente de lire les lignes verrouillées par la requête UPDATE dans la transaction 1.

La transaction 2 se déroule sans aucun blocage puisque la lecture n'est jamais bloquée, l'instruction SELECT s'exécute et enfin la ligne avec id = 3 est mise à jour car les modifications de la transaction 1 ne sont pas encore visibles.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

Cette étape est exécutée une fois la transaction 1 validée. La ligne avec id = 1 est mise à jour par la transaction 2 à l'étape précédente et est visible ici.

La ligne avec id = 3 est mise à jour par Transaction 2.

COMMIT

La transaction 2 est désormais débloquée.

Commission réussie.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

Les deux transactions exécutent la mise à jour sur la ligne avec un identifiant = 1.

Les différentes lignes sont mises à jour par les transactions 1 et 2.

NIVEAU D'ISOLATION SÉRIALISABLE PAR RAPPORT À BABELFISH SÉRIALISABLE PAR RAPPORT AU SERVEUR SQL

VERROUILLAGE DE PLAGE DANS SQL SERVER
Transaction 1 Transaction 2 SQL Server sérialisable Babelfish sérialisable

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

INSÉRER DANS LES VALEURS DES EMPLOYÉS (4, « D », 35) ;

La transaction 2 est bloquée jusqu'à ce que la transaction 1 soit validée.

La transaction 2 se déroule sans aucun blocage.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

COMMIT

La transaction 1 est validée avec succès. La transaction 2 est désormais débloquée.

La transaction 1 est validée avec succès.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La ligne nouvellement insérée est visible.

La ligne nouvellement insérée est visible.

DIFFÉRENTS RÉSULTATS FINAUX
Transaction 1 Transaction 2 SQL Server sérialisable Babelfish sérialisable

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

INSÉRER DANS LES VALEURS DES EMPLOYÉS (4, « D », 40) ;

METTRE À JOUR l'âge de l'employé SET =99 OÙ id = 4 ;

La transaction 1 est bloquée jusqu'à ce que la transaction 2 soit validée.

La transaction 1 se déroule sans aucun blocage.

COMMIT

La transaction 2 est validée avec succès. La transaction 1 est désormais débloquée.

La transaction 2 est validée avec succès.

COMMIT

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La ligne nouvellement insérée est visible avec une valeur d'âge = 99.

La ligne nouvellement insérée est visible avec une valeur d'âge = 40.

INSÉRER DANS LE TABLEAU AVEC UNE CONTRAINTE UNIQUE
Transaction 1 Transaction 2 SQL Server sérialisable Babelfish sérialisable

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

INSÉRER DANS LES VALEURS DES EMPLOYÉS (4, « D », 40) ;

INSÉRER DANS LES VALEURS DES EMPLOYÉS ((SELECT MAX (id) +1 FROM employee), « E », 50) ;

La transaction 1 est bloquée jusqu'à ce que la transaction 2 soit validée.

La transaction 1 est bloquée jusqu'à ce que la transaction 2 soit validée.

COMMIT

La transaction 2 est validée avec succès. La transaction 1 est désormais débloquée.

La transaction 2 est validée avec succès. La transaction 1 abandonnée avec une erreur. La valeur de la clé dupliquée viole une contrainte unique.

COMMIT

La transaction 1 est validée avec succès.

Les validations de la transaction 1 échouent et n'ont pas pu sérialiser l'accès en raison de dépendances en lecture/écriture entre les transactions.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

la ligne (5, « E », 50) est insérée.

Il n'existe que 4 lignes.

Dans Babelfish, les transactions simultanées exécutées avec Isolation Level serializable échoueront avec une erreur d'anomalie de sérialisation si l'exécution de ces transactions est incompatible avec toutes les exécutions en série possibles (une par une) de ces transactions.

ANOMALIE DE SÉRIALISATION
Transaction 1 Transaction 2 SQL Server sérialisable Babelfish sérialisable

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

METTRE À JOUR L'EMPLOYÉ DÉFINIR L'ÂGE = 5 OÙ L'ÂGE = 10 ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La transaction 2 est bloquée jusqu'à ce que la transaction 1 soit validée.

La transaction 2 se déroule sans aucun blocage.

METTRE À JOUR L'EMPLOYÉ DÉFINIR L'ÂGE = 35 OÙ L'ÂGE = 30 ;

COMMIT

La transaction 1 est validée avec succès.

La transaction 1 est validée en premier et peut être validée avec succès.

COMMIT

La transaction 2 est validée avec succès.

La validation de la transaction 2 échoue avec une erreur de sérialisation, l'ensemble de la transaction a été annulée. Réessayez la transaction 2.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

Les modifications apportées aux deux transactions sont visibles.

La transaction 2 a été annulée. Seules les modifications de la transaction 1 sont visibles.

Dans Babelfish, une anomalie de sérialisation n'est possible que si toutes les transactions simultanées s'exécutent au niveau d'isolation SERIALIZABLE. Par exemple, prenons l'exemple ci-dessus, mais définissons plutôt la transaction 2 sur le niveau d'isolation REPEATABLE READ.

Transaction 1 Transaction 2 Niveaux d'isolation de SQL Server Niveaux d'isolement de Babelfish

COMMENCER LA TRANSACTION

COMMENCER LA TRANSACTION

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS SÉRIALISABLE ;

DÉFINIR LE NIVEAU D'ISOLATION DES TRANSACTIONS (LECTURE RÉPÉTABLE) ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

METTRE À JOUR L'EMPLOYÉ DÉFINIR L'ÂGE = 5 OÙ L'ÂGE = 10 ;

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

La transaction 2 est bloquée jusqu'à ce que la transaction 1 soit validée.

La transaction 2 se déroule sans aucun blocage.

METTRE À JOUR L'EMPLOYÉ DÉFINIR L'ÂGE = 35 OÙ L'ÂGE = 30 ;

COMMIT

La transaction 1 est validée avec succès.

La transaction 1 est validée avec succès.

COMMIT

La transaction 2 est validée avec succès.

La transaction 2 est validée avec succès.

SÉLECTIONNEZ* PARMI LES EMPLOYÉS ;

Les modifications apportées aux deux transactions sont visibles.

Les modifications apportées aux deux transactions sont visibles.