Recette
#9: |
|
Février 2011 |
ACID n'a rien à voir avec la chimie (pH).
En quelques mots:
Le concept sous-jacent est celui de l'approche par TRANSACTION :
Bon, procédons à quelques essais afin d emieux comprendre la notion de TRANSACTION. |
BEGIN ; CREATE
TABLE test ( INSERT
INTO test (num, string) INSERT
INTO test (num, string) INSERT INTO test (num,
string) |
;BEGIN initialise la TRANSACTION :
tout ce qui suivra sera inclus dans la TRANSACTION.
vous pouvez également utiliser l'alias BEGIN TRANSACTION (très peu utilisé).
SQLite interdit les imbrications de transactions : une TRANSACTION ne peut contenir une autre transaction.
SELECT * |
Regardons maintenant le résultats :
Tout semble ok.
Quelques points importants:
|
COMMIT ; |
ROLLBACK ; |
une fois que l'on a amorcé (BEGIN)une
TRANSACTION, elle
reste en suspend.
vous pouvez :
confirmer positivement la fin de la transaction TRANSACTION, en spécifiant la clause COMMIT .
tout changement lié à la transaction sera effectué, et la BDD sera modifiée en conséquence.
ces changements seront immédiatement visibles par les autres connections.
confirmer négativement la fin de la TRANSACTION, en spécifiant la clause ROLLBACK.
tout changement est alors annulé : la BDD est inchangée.
En absence de COMMIT ou ROLLBACK, SQLite suppose que la transaction n'est pas valide et un ROLLBACK est effectué automatiquement.
Si une erreur est rencontrée dans une TRANSACTION , toute la TRANSACTION est invalidée, et un ROLLBACK est effectué.
Performance L'utilisation des TRANSACTIONs
vous parait trop complexe ? vous vous dites "je vais
simplement ignorer tout ça ..."
Cette astuce améliorera grandement les performances. |
bizarreries des connecteurs Développeurs, soyez prudents:
Avec le connecteur Java / JDBC il faut d'abord quitter le mode autocommit puis déclarer un COMMIT lorsque nécessaire.
Python suit une approche différente : la TRANSACTION
est active de façon transparente à chaque fois. |
|
Author: Alessandro Furieri a.furieri@lqt.it |
This work is licensed under the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. |
|
|
|
Permission is granted to copy, distribute and/or modify this
document under the terms of the |