Accéder au contenu principal
Documents
FonctionsExpressionsKeywordsDéclarationsClauses

Déclaration MySQL START TRANSACTION

L'instruction `START TRANSACTION` de MySQL est utilisée pour commencer une nouvelle transaction, permettant à plusieurs opérations SQL d'être exécutées comme une seule unité de travail. Il s'assure que toutes les opérations de la transaction sont terminées avec succès avant de valider les modifications dans la base de données, ce qui permet de maintenir l'intégrité et la cohérence des données.

Utilisation

`START TRANSACTION` est utilisé lorsque vous devez vous assurer qu'un ensemble d'opérations est atomique, ce qui signifie que soit toutes les opérations réussissent, soit aucune ne réussit. Ceci est crucial pour maintenir l'intégrité des données dans des scénarios impliquant des modifications multiples et dépendantes de la base de données.

START TRANSACTION;

Dans cette syntaxe, `START TRANSACTION` commence une nouvelle transaction, isolant les opérations suivantes jusqu'à ce qu'un `COMMIT` ou un `ROLLBACK` soit émis. Notez que `BEGIN` ou `BEGIN WORK` peuvent aussi être utilisés comme synonymes pour démarrer une transaction, et vous pouvez spécifier les caractéristiques de la transaction comme les niveaux d'isolation si nécessaire.

Exemples

1. Transaction de base

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

Cet exemple de base permet de transférer des fonds entre deux comptes. La transaction garantit que les deux mises à jour sont appliquées en même temps.

2. Transaction avec retour en arrière

START TRANSACTION;
INSERT INTO orders (order_id, product_id, quantity) VALUES (1, 101, 2);
DELETE FROM inventory WHERE product_id = 101 AND quantity < 0;
ROLLBACK;

Ici, un retour en arrière est utilisé pour annuler les modifications si l'opération de suppression échoue, ce qui permet de maintenir la cohérence de la base de données.

3. Transaction avec condition

START TRANSACTION;
UPDATE products SET stock = stock - 5 WHERE product_id = 200 AND stock >= 5;
IF ROW_COUNT() = 0 THEN
    ROLLBACK;
ELSE
    INSERT INTO order_details (order_id, product_id, quantity) VALUES (10, 200, 5);
    COMMIT;
END IF;

Cet exemple incorpore une condition pour vérifier les niveaux de stock avant d'engager la transaction afin de s'assurer que les règles d'inventaire sont respectées. Assurez-vous de la compatibilité avec la version de MySQL utilisée, car la syntaxe peut varier.

Conseils et bonnes pratiques

  • Utilisez les transactions pour les opérations critiques. Appliquez les transactions aux opérations qui doivent être atomiques, cohérentes, isolées et durables (ACID).
  • Mettez toujours fin aux transactions. Terminez chaque transaction avec `COMMIT` ou `ROLLBACK` pour libérer les verrous et éviter les problèmes potentiels.
  • Méfiez-vous des longues transactions. Les transactions doivent être aussi courtes que possible afin de réduire la contention des verrous et d'améliorer les performances.
  • Vérifiez s'il y a des erreurs. Mettre en œuvre la gestion des erreurs dans les transactions pour décider s'il faut valider ou revenir en arrière en fonction de la réussite ou de l'échec.
  • Éviter l'interaction avec l'utilisateur. N'incluez pas d'invites pour l'utilisateur dans une transaction afin d'éviter que la durée de la transaction ne soit trop longue.
  • Comprendre le comportement de l'engagement automatique. Par défaut, MySQL fonctionne avec le mode autocommitateur activé. Lorsque vous utilisez des transactions, désactivez la fonction "autocommit" pour gérer manuellement les transactions.
  • Transactions imbriquées. MySQL ne supporte pas les transactions imbriquées. Soyez conscient de cette limitation lorsque vous concevez des flux de travail transactionnels complexes.

Amélioration de SQL pour les débutants

Acquérir les compétences SQL pour interagir avec vos données et les interroger.
Commencez à apprendre gratuitement