ホームページ > データベース > mysql チュートリアル > 最大予約制限を処理して、T-SQL で行をアトミックに更新または挿入する方法

最大予約制限を処理して、T-SQL で行をアトミックに更新または挿入する方法

Linda Hamilton
リリース: 2025-01-07 13:06:41
オリジナル
504 人が閲覧しました

How to Atomically Update or Insert Rows in T-SQL, Handling Maximum Booking Limits?

アトミックで信頼性の高い行更新の確保: 存在の確認と存在しない場合の挿入

T-SQL ストアド プロシージャでは、更新を目的としています。テーブル内の行、または存在しない場合は挿入します。これは、アトミック性と信頼性が最優先される予約システムにとって非常に重要です。

行の存在の確認

指定された FlightId を持つ行が存在するかどうかを確認するには、 EXISTS 演算子:

IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id)
ログイン後にコピー

行が存在する場合、内部クエリは空ではない結果を返し、 IF 条件が TRUE と評価されます。

行が存在しない場合の挿入

ELSE ブロック内で、行が存在しない場合は、挿入操作を実行できます。 :

INSERT INTO Bookings ... (omitted)
ログイン後にコピー

取り扱い条件違反

あなたの質問は、フライトごとに予約できる最大チケット数の制限を強制する必要性を強調しています。これは、UPDATE ステートメントの TicketsMax 列をチェックすることで実現できます。

UPDATE Bookings
SET TicketsBooked = TicketsBooked + @TicketsToBook
WHERE FlightId = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook)
ログイン後にコピー

条件に違反した場合 (つまり、すでに予約されているチケットが多すぎる場合)、UPDATE は失敗し、FALSE を返すことができます。操作の失敗を示します。

トランザクション管理

原子性と信頼性を確保するには、操作をトランザクション内に含めます。

BEGIN TRANSACTION

-- Perform operations (update/insert/condition check)

IF @@error = 0
BEGIN
    COMMIT TRANSACTION
    RETURN TRUE
END
ELSE
BEGIN
    ROLLBACK TRANSACTION
    RETURN FALSE
END
ログイン後にコピー

@@error システム変数は、データベース操作の成功または失敗を示します。エラーが発生した場合 (@@error ≠ 0)、トランザクションはロールバックされ、FALSE が返されます。それ以外の場合、トランザクションはコミットされ、予約が成功したことを示す TRUE が返されます。

以上が最大予約制限を処理して、T-SQL で行をアトミックに更新または挿入する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート