Assurer des mises à jour de lignes atomiques et fiables dans T-SQL
Dans le domaine de la gestion des données, il est souvent crucial de s'assurer de l'existence d'un ligne avant d’effectuer les mises à jour. Ceci est particulièrement vital dans les scénarios où l’intégrité et l’atomicité des données sont primordiales. Cet article explore une approche fiable pour vérifier si une ligne existe dans une table et, si elle est absente, l'insérer, le tout dans le cadre d'une seule transaction.
Mises à jour atomiques et fiables des lignes
Envisager un système de réservation où il est impératif d'éviter la surréservation et de garantir la fiabilité de chaque réservation. La mise en œuvre de cette fonctionnalité nécessite une approche atomique et fiable, garantissant que les deux opérations (mise à jour ou insertion) sont exécutées avec succès ou que les deux sont annulées, préservant ainsi l'intégrité des données.
Examen du code
L'extrait de code fourni tente de mettre à jour une ligne dans le tableau Réservations. Cependant, si la ligne n’existe pas, elle ne parvient pas à gérer correctement le scénario. De plus, l'utilisation de @@ROWCOUNT par la requête pour vérifier les lignes existantes introduit des problèmes d'incohérence des données.
Implémentation de code améliorée
Pour corriger ces problèmes et garantir le comportement souhaité, un code modifié est présenté ci-dessous :
-- Initiate transaction (assuming SQL Server) BEGIN TRANSACTION -- Attempt to update row UPDATE Bookings SET TicketsBooked = TicketsBooked + @TicketsToBook WHERE FlightId = @Id AND TicketsMax >= (TicketsBooked + @TicketsToBook) -- Check if row updated IF @@ROWCOUNT = 0 BEGIN -- Insert new row (if row doesn't exist) INSERT INTO Bookings ... (omitted) END -- Transaction completion (commit or rollback based on result) IF @@ERROR = 0 BEGIN COMMIT TRANSACTION SELECT 1 AS Result -- Return true (if transaction committed) END ELSE BEGIN ROLLBACK TRANSACTION SELECT 0 AS Result -- Return false (if transaction failed) END
Explication
Ce code amélioré comprend plusieurs modifications cruciales :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!