ホームページ > データベース > mysql チュートリアル > IF EXISTS UPDATE ELSE INSERT INTO を使用して MySQL でレコードを効率的に挿入または更新する方法

IF EXISTS UPDATE ELSE INSERT INTO を使用して MySQL でレコードを効率的に挿入または更新する方法

Linda Hamilton
リリース: 2025-01-08 15:51:41
オリジナル
396 人が閲覧しました

How to Efficiently Insert or Update Records in MySQL Using IF EXISTS UPDATE ELSE INSERT INTO?

MySQL はレコードを効率的に挿入または更新します: IF EXISTS UPDATE ELSE INSERT INTO

SQL には、一意のキーの存在に基づいてデータベース テーブルにレコードを挿入または更新するためのメソッドがいくつか用意されています。このガイドでは、試したことが機能しない理由を説明し、MySQL の INSERT ... ON DUPLICATE KEY UPDATE ステートメントを使用してテストされた 2 つの解決策を提供します。

試行が失敗した理由

  • 一意制約がありません: クエリで ON DUPLICATE KEY UPDATE を使用しようとしていますが、subs_email 列に一意制約がないため、クエリは失敗します。
  • 構文エラー: 使用しようとしている IF EXISTS ブロックと BEGIN/END ブロックは、MySQL で有効な SQL 構文ではありません。

解決策 1: 一意制約を作成し、INSERT ... ON DUPLICATE KEY UPDATE を使用します

  1. subs_email 列に一意の制約があることを確認してください:
<code class="language-sql">ALTER TABLE subs ADD UNIQUE (subs_email);</code>
ログイン後にコピー
  1. 次のクエリを使用します:
<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>
ログイン後にコピー

解決策 2: ON DUPLICATE KEY UPDATE を使用したパラメータ化されたプリペアド ステートメント

  1. パラメータのプレースホルダーを使用してステートメントを準備および実行します:
<code class="language-java">String sql = "INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES (?, ?, ?)"
                    + " ON DUPLICATE KEY UPDATE subs_name = ?, subs_birthday = ?";

PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
preparedStatement.setString(2, email);
preparedStatement.setString(3, birthday);
preparedStatement.setString(4, name); // 重复键更新的第二个参数
preparedStatement.setString(5, birthday); // 重复键更新的第三个参数
preparedStatement.executeUpdate();</code>
ログイン後にコピー

SQL インジェクション攻撃を防ぐために、パラメーター プレースホルダーを必ず使用してください。

これらのソリューションを適用すると、subs_email 列の一意性に基づいてデータベース テーブルにレコードを効率的に挿入または更新できます。

以上がIF EXISTS UPDATE ELSE INSERT INTO を使用して MySQL でレコードを効率的に挿入または更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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