L'idée d'une transaction en base de données, c'est que tu veux:
-avoir une base dans un état cohérent avant la transaction
-avoir une base dans un état cohérent après la transaction
une transaction, c'est
-une prise de verrou sur la base
-une série de requêtes
-un commit ou un rollback
Pour ça, tu définis toutes tes requêtes et quand tu es sûr que toutes tes requêtes ont été prises en compte (et qu'après celle-ci, tu es dans un état cohérent), tu fais un commit pour les appliquer effectivement.
Si une erreur se produit alors que tu n'as pas passé toutes tes requêtes, au lieu de faire un commit, tu peux faire un rollback et ainsi annuler toute la série de requête et revenir dans un état cohérent de la base (l'état dans lequel tu étais avant de passer ta première requête).
en mode auto-commit, si je dis pas de bêtises (mais reprenez moi parce que je suis pas expert en base de données) ça va, pour chaque requête:
-prendre un verrou sur la base de données
-jouer la requête
-faire un commit
-lâcher le verrou sur la base de données
donc si t'as 100 000 requêtes, tu prends 100 000 fois le verrou sur la base de données et ça, c'est très couteux.
Voili, j'espère avoir fourni une explication claire (et pas trop fausse )
Message édité par liouan le 07-07-2009 à 17:12:44