在資料庫表中根據唯一鍵的存在插入或更新記錄,SQL 提供了幾種方法。本指南解釋了您嘗試的方法為何無效,並提供了兩種經過測試的解決方案,使用 MySQL 的 INSERT ... ON DUPLICATE KEY UPDATE
語句。
為何您的嘗試失敗
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中文網其他相關文章!