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)
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)
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)
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
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!