在数据库表中根据唯一键的存在插入或更新记录,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中文网其他相关文章!