Assurer des mises à jour de lignes atomistiques et fiables : vérification de l'existence et insertion en cas d'absence
Dans votre procédure stockée T-SQL, votre objectif est de mettre à jour une ligne dans un tableau, ou insérez-la si elle n'existe pas. Ceci est crucial pour un système de réservation, où l'atomicité et la fiabilité sont primordiales.
Vérification de l'existence d'une ligne
Pour vérifier si une ligne avec le FlightId spécifié existe, utilisez le Opérateur EXISTS :
IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id)
Si la ligne existe, la requête interne renvoie un résultat non vide et la condition IF est évaluée à VRAI.
Insérer si la ligne n'existe pas
À l'intérieur du bloc ELSE, si la ligne n'existe pas, vous pouvez effectuer l'opération d'insertion :
INSERT INTO Bookings ... (omitted)
Violation des conditions de manipulation
Votre question met en évidence le Il faut imposer une limite au nombre maximum de billets réservables par vol. Ceci peut être réalisé en vérifiant la colonne TicketsMax dans l'instruction UPDATE :
UPDATE Bookings SET TicketsBooked = TicketsBooked + @TicketsToBook WHERE FlightId = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook)
Si la condition n'est pas respectée (c'est-à-dire qu'il y a déjà trop de billets réservés), la mise à jour échouera et vous pourrez renvoyer FALSE. pour indiquer l'échec de l'opération.
Gestion des transactions
Pour assurer l'atomicité et fiabilité, enfermez les opérations dans une transaction :
BEGIN TRANSACTION -- Perform operations (update/insert/condition check) IF @@error = 0 BEGIN COMMIT TRANSACTION RETURN TRUE END ELSE BEGIN ROLLBACK TRANSACTION RETURN FALSE END
La variable système @@error indique le succès ou l'échec des opérations de la base de données. Si une erreur se produit (@@error ≠ 0), la transaction est annulée et renvoie FALSE. Sinon, la transaction est validée et TRUE est renvoyé pour signifier une réservation réussie.
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!