ホームページ > データベース > mysql チュートリアル > 行の存在をアトミックにチェックして T-SQL に挿入するにはどうすればよいですか?

行の存在をアトミックにチェックして T-SQL に挿入するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-07 13:02:41
オリジナル
364 人が閲覧しました

How Can I Atomically Check for Row Existence and Insert in T-SQL?

T-SQL を使用してアトミックな行の存在チェックと挿入を実行する方法

データベース システムでは、多くの場合、行に対して操作を実行する必要があります。それは存在するかもしれないし、存在しないかもしれない。このようなシナリオでは、データの整合性を維持するためにアトミック性と信頼性を確保することが重要です。

行が存在するかどうかを確認し、それに応じて挿入操作を実行するには、T-SQL で次のアプローチを検討してください。

IF EXISTS (SELECT * FROM Bookings WHERE FlightID = @Id)
BEGIN
    -- Update the existing row here...
END
ELSE
BEGIN
    -- Insert a new row here...
END
ログイン後にコピー

このアプローチでは、IF EXISTS ステートメントを使用して存在チェックと挿入操作の両方を 1 つのトランザクション内で実行することでアトミック性を確保します。これにより、同時トランザクションによって重複行が挿入される可能性がある競合状態が防止されます。

トランザクション制御

トランザクション内で操作をラップするには、BEGIN TRANSACTION、COMMIT TRANSACTION などのステートメントを使用します。 、ROLLBACK TRANSACTION。

行数処理

@@ROWCOUNT グローバル変数は、操作の影響を受ける行数を追跡します。この場合、行が存在する場合でも (変更が適用されていない場合など)、更新操作で 0 行が返される可能性があるため、存在チェックの信頼性は高くありません。したがって、サブクエリで IF EXISTS を使用する方が信頼性が高くなります。

トランザクション ステータスを返す

トランザクションの成功を示すには、TRY-CATCH を使用できます。ブロックして適切な値を返します:

BEGIN TRY
    -- Transaction Logic
    COMMIT TRANSACTION
    RETURN 1 -- Transaction committed
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
    RETURN 0 -- Transaction failed
END CATCH
ログイン後にコピー

以上が行の存在をアトミックにチェックして T-SQL に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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