Heim > Datenbank > MySQL-Tutorial > Wie aktualisiere oder füge ich Zeilen in T-SQL atomar ein und handhabe maximale Buchungslimits?

Wie aktualisiere oder füge ich Zeilen in T-SQL atomar ein und handhabe maximale Buchungslimits?

Linda Hamilton
Freigeben: 2025-01-07 13:06:41
Original
503 Leute haben es durchsucht

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

Sicherstellung atomarer und zuverlässiger Zeilenaktualisierungen: Prüfung auf Existenz und Einfügen bei Abwesenheit

In Ihrer gespeicherten T-SQL-Prozedur möchten Sie eine Aktualisierung durchführen eine Zeile in einer Tabelle oder fügen Sie sie ein, wenn sie nicht vorhanden ist. Dies ist von entscheidender Bedeutung für ein Buchungssystem, bei dem Atomizität und Zuverlässigkeit von größter Bedeutung sind.

Überprüfung auf Zeilenexistenz

Um zu überprüfen, ob eine Zeile mit der angegebenen FlightId vorhanden ist, verwenden Sie die EXISTS-Operator:

IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id)
Nach dem Login kopieren

Wenn die Zeile vorhanden ist, gibt die innere Abfrage ein nicht leeres Ergebnis zurück und die IF-Bedingung wird als ausgewertet WAHR.

Einfügen, wenn Zeile nicht vorhanden ist

Wenn die Zeile im ELSE-Block nicht vorhanden ist, können Sie den Einfügevorgang ausführen:

INSERT INTO Bookings ... (omitted)
Nach dem Login kopieren

Umgang mit Bedingungsverstößen

Ihre Frage unterstreicht die Notwendigkeit eine Begrenzung der maximal buchbaren Tickets pro Flug durchzusetzen. Dies kann durch Überprüfen der Spalte „TicketsMax“ in der UPDATE-Anweisung erreicht werden:

UPDATE Bookings
SET TicketsBooked = TicketsBooked + @TicketsToBook
WHERE FlightId = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook)
Nach dem Login kopieren

Wenn die Bedingung verletzt wird (d. h. es sind bereits zu viele Tickets gebucht), schlägt das UPDATE fehl und Sie können FALSE zurückgeben um den Fehler des Vorgangs anzuzeigen.

Transaktionsmanagement

Um Atomizität und Zuverlässigkeit sicherzustellen, Schließen Sie die Vorgänge in eine Transaktion ein:

BEGIN TRANSACTION

-- Perform operations (update/insert/condition check)

IF @@error = 0
BEGIN
    COMMIT TRANSACTION
    RETURN TRUE
END
ELSE
BEGIN
    ROLLBACK TRANSACTION
    RETURN FALSE
END
Nach dem Login kopieren

Die Systemvariable @@error zeigt den Erfolg oder Misserfolg der Datenbankoperationen an. Wenn ein Fehler auftritt (@@error ≠ 0), wird die Transaktion zurückgesetzt und FALSE zurückgegeben. Andernfalls wird die Transaktion festgeschrieben und TRUE zurückgegeben, um eine erfolgreiche Buchung anzuzeigen.

Das obige ist der detaillierte Inhalt vonWie aktualisiere oder füge ich Zeilen in T-SQL atomar ein und handhabe maximale Buchungslimits?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage