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
Libérer: 2025-01-07 13:06:41
original
503 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal