確保 T-SQL 中原子且可靠的行更新
在資料管理領域,確定是否存在執行更新之前的行。這在資料完整性和原子性至關重要的場景中尤其重要。本文探討了一種可靠的方法來檢查表中是否存在行,如果不存在,則將其插入,所有這些都在單一事務的範圍內。
原子且可靠的行更新
考慮一個必須防止超額預訂並保證每次預訂的可靠性的預訂系統。實現此功能需要原子且可靠的方法,確保兩個操作(更新或插入)成功執行或回滾,從而保持資料完整性。
檢查程式碼
提供的程式碼片段嘗試更新 Bookings 表中的一行。但是,如果該行不存在,則無法正確處理該場景。此外,查詢使用 @@ROWCOUNT 檢查現有行會引入資料不一致問題。
改進的程式碼實作
要修正這些問題並確保所需的行為,提供了修改後的程式碼下面:
-- Initiate transaction (assuming SQL Server) BEGIN TRANSACTION -- Attempt to update row UPDATE Bookings SET TicketsBooked = TicketsBooked + @TicketsToBook WHERE FlightId = @Id AND TicketsMax >= (TicketsBooked + @TicketsToBook) -- Check if row updated IF @@ROWCOUNT = 0 BEGIN -- Insert new row (if row doesn't exist) INSERT INTO Bookings ... (omitted) END -- Transaction completion (commit or rollback based on result) IF @@ERROR = 0 BEGIN COMMIT TRANSACTION SELECT 1 AS Result -- Return true (if transaction committed) END ELSE BEGIN ROLLBACK TRANSACTION SELECT 0 AS Result -- Return false (if transaction failed) END
說明
此增強的程式碼包括幾個重要的修改:
以上是如何確保T-SQL中原子且可靠的行更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!