条件付き MySQL INSERT ステートメント
データベース管理では、テーブルへのデータの挿入が特定の条件下でのみ実行される必要がある状況があります。ストアド プロシージャは条件付き挿入に使用できますが、そのような操作を 1 つのクエリ内で実行する方が効率的です。
カスタム条件付き INSERT ステートメント
MySQL では、条件付き挿入は、次の形式のクエリを使用して実行できます:
INSERT INTO TABLE SELECT value_for_column1, value_for_column2, ... FROM wherever WHERE your_special_condition
WHERE your_special_condition で指定されたサブクエリが行を返さない場合 (条件が false など)、INSERT 操作は発生しません。
例
次のシナリオを考えてみましょう。qty_on_hand 列を持つ製品テーブル (products) と、product_id 列と qty 列を持つ注文テーブル (orders) があります。特定の製品の注文を受け取るときは、注文を挿入する前に十分な数量が手元にあることを確認する必要があります。
条件付き INSERT ステートメントを使用すると、数量チェックと挿入操作を 1 つの操作に組み合わせることができます。クエリ:
insert into orders (product_id, qty) select 2, 20 where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
このクエリは、指定された製品に十分な数量が手元にある場合にのみ、新しい注文行を挿入します。
同時実行性の考慮事項
条件付き INSERT ステートメントを使用した場合でも、同時実行の問題が発生する可能性があることに注意することが重要です。複数の注文が同時に行われる場合、注文が挿入される前に、複数のクエリで手元の数量が確認されることがあります。次の注文が行われる前に手持数量が更新されない場合、それでも過剰販売につながる可能性があります。これに対処するには、ロックやトランザクションなどの適切な同時実行制御メカニズムの実装を検討する必要があります。
以上がMySQL で条件付き INSERT ステートメントを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。