Y a comme un défaut...
Les systèmes de gestion de bases de données relationnelles sont connus pour leurs propriétés ACID. Le I signifie ISOLATION. De multiples transactions peuvent être gérées simultanément par un SGBDR. Le standard SQL définit plusieurs niveaux disolation fixant les règles régissant la concurrence entre ces transactions. Dans cet article nous allons nous intéresser au niveau utilisé par défaut par PostgreSQL et Oracle, le READ COMMITTED. Ce niveau nautorise pas les lectures sales (dirty reads) présentées dans larticle sur le niveau READ UNCOMMITTED mais autorise les lectures non reproductibles (nonrepeatable read). Cela signifie quen essayant de relire les mêmes données dans une transaction vous pouvez constater quelles ont changé. En effet, dautres transactions peuvent avoir manipulé ces données en les mettant à jour ou en les supprimant et peuvent avoir validé ces changements.
Démonstration avec PostgreSQL 9.6 :
PostgreSQL se comporte comme le standard SQL le prévoit. Nous navons pas obtenu de lecture sale mais avons obtenu une lecture non reproductible dans la transaction de la session 1 (niveau disolation READ COMMITTED affecté explicitement) comme dans la transaction de la session 2 (niveau disolation READ COMMITTED affecté par défaut). En effet, lors du deuxième "SELECT * FROM t1", nous avons relu lunique ligne de la table t1 et nous avons obtenu un résultat différent de celui obtenu lors du premier "SELECT * FROM t1".
A présent un test avec Oracle Database dans sa version 11.2.0.2 :
Oracle Database se comporte comme PostgreSQL en ce qui concerne le niveau disolation READ COMMITTED et il sagit également de son niveau disolation par défaut.