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 を使用します
subs_email
列に一意の制約があることを確認してください: <code class="language-sql">ALTER TABLE subs ADD UNIQUE (subs_email);</code>
<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 を使用したパラメータ化されたプリペアド ステートメント
<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 サイトの他の関連記事を参照してください。