PostgreSQL - TRANSACTIONS

Une transaction est une unité de travail effectuée sur une base de données. Les transactions sont des unités ou des séquences de travail accomplies dans un ordre logique, que ce soit de manière manuelle par un utilisateur ou automatiquement par une sorte de programme de base de données.

Une transaction est la propagation d'un ou plusieurs changements dans la base de données. Par exemple, si vous créez un enregistrement, mettez à jour un enregistrement ou supprimez un enregistrement de la table, vous effectuez une transaction sur la table. Il est important de contrôler les transactions pour garantir l'intégrité des données et gérer les erreurs de base de données.

En pratique, vous regrouperez de nombreuses requêtes PostgreSQL dans un groupe et vous les exécuterez toutes ensemble dans le cadre d'une transaction.

Propriétés des transactions

Les transactions ont les quatre propriétés standard suivantes, généralement désignées par l'acronyme ACID -

  • Atomicity- S'assure que toutes les opérations au sein de l'unité de travail sont terminées avec succès; sinon, la transaction est abandonnée au point d'échec et les opérations précédentes sont restaurées à leur état antérieur.

  • Consistency - S'assure que la base de données change correctement d'état après une transaction validée avec succès.

  • Isolation - Permet aux transactions de fonctionner indépendamment et de manière transparente les unes des autres.

  • Durability - Garantit que le résultat ou l'effet d'une transaction validée persiste en cas de défaillance du système.

Contrôle des transactions

Les commandes suivantes sont utilisées pour contrôler les transactions -

  • BEGIN TRANSACTION - Pour démarrer une transaction.

  • COMMIT - Pour enregistrer les modifications, vous pouvez également utiliser END TRANSACTION commander.

  • ROLLBACK - Pour annuler les modifications.

Les commandes de contrôle transactionnel ne sont utilisées qu'avec les commandes DML INSERT, UPDATE et DELETE uniquement. Ils ne peuvent pas être utilisés lors de la création ou de la suppression de tables car ces opérations sont automatiquement validées dans la base de données.

La commande BEGIN TRANSACTION

Les transactions peuvent être lancées en utilisant BEGIN TRANSACTION ou simplement la commande BEGIN. Ces transactions persistent généralement jusqu'à ce que la prochaine commande COMMIT ou ROLLBACK soit rencontrée. Mais une transaction sera également ROLLBACK si la base de données est fermée ou si une erreur se produit.

Voici la syntaxe simple pour démarrer une transaction -

BEGIN;

or

BEGIN TRANSACTION;

La commande COMMIT

La commande COMMIT est la commande transactionnelle utilisée pour enregistrer les modifications invoquées par une transaction dans la base de données.

La commande COMMIT enregistre toutes les transactions dans la base de données depuis la dernière commande COMMIT ou ROLLBACK.

La syntaxe de la commande COMMIT est la suivante -

COMMIT;

or

END TRANSACTION;

La commande ROLLBACK

La commande ROLLBACK est la commande transactionnelle utilisée pour annuler les transactions qui n'ont pas déjà été enregistrées dans la base de données.

La commande ROLLBACK ne peut être utilisée que pour annuler des transactions depuis la dernière commande COMMIT ou ROLLBACK a été émise.

La syntaxe de la commande ROLLBACK est la suivante -

ROLLBACK;

Exemple

Considérez que la table COMPANY contient les enregistrements suivants -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Maintenant, commençons une transaction et supprimons les enregistrements de la table ayant age = 25 et enfin nous utilisons la commande ROLLBACK pour annuler toutes les modifications.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

Si vous vérifiez que la table COMPANY contient toujours les enregistrements suivants -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Maintenant, commençons une autre transaction et supprimons les enregistrements de la table ayant age = 25 et enfin nous utilisons la commande COMMIT pour valider toutes les modifications.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

Si vous vérifiez la table COMPANY, elle contient toujours les enregistrements suivants -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)