SQL: 条件付き挿入と更新
このガイドでは、一致するレコードの存在に基づいて、条件付きでデータベース行を効率的に挿入または更新する方法を説明します。 以前のアプローチは、構文が不適切であったり、データベースの制約がなかったりするために失敗した可能性があります。 このソリューションは、堅牢で安全な方法を提供します。
1.一意性の強制:
まず、関連する列 (たとえば、subs_email
テーブルの subs
) に一意制約が存在することを確認します。これは重複エントリを防止し、条件ロジックにとって非常に重要です。
<code class="language-sql">ALTER TABLE subs ADD UNIQUE (subs_email);</code>
2. INSERT ... ON DUPLICATE KEY UPDATE
を活用:
MySQL の INSERT ... ON DUPLICATE KEY UPDATE
ステートメントは、条件付きの挿入と更新をエレガントに処理します。 指定された一意のキーを持つ行がすでに存在する場合は、その行が更新されます。それ以外の場合は、新しい行が挿入されます。
<code class="language-sql">INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE subs_name = VALUES(subs_name), subs_birthday = VALUES(subs_birthday);</code>
?
プレースホルダーはパラメーターのバインドに重要です (以下で説明します)。 これらは、アプリケーションの入力 (URL 文字列など) から抽出された subs_name
、subs_email
、subs_birthday
の値を表します。
3. 安全なパラメータ バインディング:
SQL インジェクションの脆弱性を防ぐために、常にパラメーター バインディングを使用してください。 これには、SQL 文字列に値を直接埋め込むのではなく、プリペアド ステートメントを使用し、値をパラメータとして渡すことが含まれます。 これにより、ユーザーが指定したデータが実行可能コードではなくデータとして扱われることが保証されます。 具体的な実装はデータベース ライブラリ (JDBC の など) によって異なります。executeUpdate()
以上が既存の行に基づいて SQL で条件付き INSERT または UPDATE を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。