Heim > Datenbank > MySQL-Tutorial > Wie kann eine atomare und zuverlässige Zeilenverarbeitung in T-SQL gewährleistet werden?

Wie kann eine atomare und zuverlässige Zeilenverarbeitung in T-SQL gewährleistet werden?

Patricia Arquette
Freigeben: 2025-01-07 13:11:41
Original
414 Leute haben es durchsucht

How to Guarantee Atomic and Reliable Row Handling in T-SQL?

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;
Nach dem Login kopieren

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!

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