ON DUPLICATE KEY UPDATE
MySQL 的 ON DUPLICATE KEY UPDATE
子句提供了一种简化的方法,用于在单个查询中对多行执行插入和更新操作。 这在处理唯一键、防止错误和确保数据一致性时特别有用。
场景:
考虑这样一个场景:您需要向表中插入多行,但由于重复的唯一键值,某些行可能已经存在。 您希望使用新数据更新现有行,而不是生成错误。
示例:
假设您有以下 SQL 语句,旨在将多行插入名为 beautiful
的表中:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29);</code>
如果name
是唯一键并且某些名称已经存在,则此查询将失败。 为了解决这个问题,我们使用 ON DUPLICATE KEY UPDATE
.
解决方案:
将 ON DUPLICATE KEY UPDATE
子句附加到您的 INSERT
语句中:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>
此修改后的查询将插入 name
唯一的新行。 如果遇到重复的 name
,则仅 age
列将更新为 VALUES
子句中提供的值。
现代语法(MySQL 8.0.19 及更高版本):
MySQL 8.0.19 及更高版本提供了使用别名的更具可读性的方法:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) AS new ON DUPLICATE KEY UPDATE age = new.age;</code>
这里,AS new
为新行分配一个别名,允许您清楚地引用其字段(例如,new.age
)。
旧语法(8.0.19 之前的 MySQL 版本):
对于较旧的 MySQL 版本,VALUES
关键字用于引用要插入的值:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>
通过使用ON DUPLICATE KEY UPDATE
,您可以在单个 SQL 语句中高效管理插入和更新,从而简化代码并提高数据库性能。
以上是如何使用 MySQL 的 ON DUPLICATE KEY UPDATE 进行多行插入和更新?的详细内容。更多信息请关注PHP中文网其他相关文章!