Maison >base de données >tutoriel mysql >Comment mettre à jour ou insérer atomiquement des lignes dans T-SQL, en gérant les limites maximales de réservation ?

Comment mettre à jour ou insérer atomiquement des lignes dans T-SQL, en gérant les limites maximales de réservation ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-07 13:06:41547parcourir

How to Atomically Update or Insert Rows in T-SQL, Handling Maximum Booking Limits?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn