Atomere und zuverlässige Zeilenverarbeitung mit T-SQL
Um die Integrität eines Buchungssystems aufrechtzuerhalten, ist es entscheidend, sicherzustellen, dass Aktualisierungen und Einfügungen erfolgen sind atomar und zuverlässig. Eine atomare Transaktion garantiert, dass, wenn mehrere Benutzer gleichzeitig versuchen, dieselbe Zeile zu aktualisieren, nur eine Aktualisierung erfolgreich ist, wodurch Race Conditions verhindert werden.
Angenommen, Sie haben eine Tabelle mit dem Namen „Bookings“ mit einem eindeutigen Index für die „FlightId“. Spalte. Ihr Ziel besteht darin, eine gespeicherte Prozedur zu erstellen, die die Spalte „TicketsBooked“ für eine bestimmte Flug-ID aktualisiert. Wenn die dieser Flug-ID entsprechende Zeile nicht vorhanden ist, müssen Sie sie einfügen.
So können Sie diesen atomaren und zuverlässigen Vorgang mit T-SQL erreichen:
-- BEGIN TRANSACTION BEGIN TRANSACTION; -- Check if the row exists IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id) BEGIN -- Update the existing row UPDATE Bookings SET TicketsBooked = TicketsBooked + @TicketsToBook WHERE FlightID = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook); END ELSE BEGIN -- Insert a new row INSERT INTO Bookings (FlightID, TicketsBooked) VALUES (@Id, @TicketsToBook); END; -- COMMIT TRANSACTION COMMIT TRANSACTION; -- Return success (TRUE) SELECT CASE WHEN @@ERROR = 0 THEN 1 ELSE 0 END AS Success;
Dies Die gespeicherte Prozedur verwendet die Anweisungen BEGIN TRANSACTION und COMMIT TRANSACTION, um die Transaktionsgrenze zu definieren. Innerhalb der Transaktion wird zunächst mithilfe der IF EXISTS-Anweisung geprüft, ob die Zeile mit der angegebenen Flug-ID vorhanden ist. Ist dies nicht der Fall, fügt die INSERT-Anweisung eine neue Zeile ein.
Wenn die Zeile vorhanden ist, aktualisiert die UPDATE-Anweisung die Spalte „TicketsBooked“ nur, wenn der aktualisierte Wert den Grenzwert „TicketsMax“ nicht überschreitet. Durch die Verwendung einer Transaktion stellen wir sicher, dass entweder die Aktualisierung oder Einfügung erfolgreich festgeschrieben wird, oder wenn ein Fehler auftritt, wird die Transaktion zurückgesetzt.
Abschließend überprüft die CASE-Anweisung die globale Variable @@ERROR, um die zu bestimmen Ermittelt den Erfolg oder Misserfolg der Transaktion und gibt entsprechend einen booleschen Wert (TRUE oder FALSE) zurück.
Das obige ist der detaillierte Inhalt vonWie kann eine atomare und zuverlässige Zeilenverarbeitung in T-SQL gewährleistet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!