首頁 > 資料庫 > mysql教程 > 如何確保 T-SQL 中原子且可靠的行處理?

如何確保 T-SQL 中原子且可靠的行處理?

Patricia Arquette
發布: 2025-01-07 13:11:41
原創
425 人瀏覽過

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

使用T-SQL 進行原子且可靠的行處理

為了維護預訂系統的完整性,確保更新和插入至關重要是原子的且可靠的。原子事務保證,如果多個使用者嘗試同時更新同一行,則只有一個更新會成功,從而防止競爭條件。

假設您有一個名為「Bookings」的表,在「FlightId」上有一個唯一索引柱。您的目標是建立一個預存程序來更新特定航班 ID 的「TicketsBooked」欄位。如果與該航班 ID 對應的行不存在,則需要插入它。

以下是如何使用 T-SQL 實現此原子且可靠的操作:

-- 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;
登入後複製

This儲存程序使用 BEGIN TRANSACTION 和 COMMIT TRANSACTION 語句來定義交易邊界。在交易中,它首先使用 IF EXISTS 語句檢查具有指定航班 ID 的行是否存在。如果不存在,INSERT 語句將插入一個新行。

如果該行存在,則僅當更新的值不超過「TicketsMax」限制時,UPDATE 語句才會更新「TicketsBooked」欄位。透過使用事務,我們確保更新或插入成功提交,或者如果發生任何錯誤,則回滾事務。

最後,CASE 語句檢查 @@ERROR 全域變數以決定交易成功或失敗,並對應傳回布林值(TRUE 或 FALSE)。

以上是如何確保 T-SQL 中原子且可靠的行處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板