首页 >数据库 >mysql教程 >如何使用 MySQL 的 ON DUPLICATE KEY UPDATE 进行多行插入和更新?

如何使用 MySQL 的 ON DUPLICATE KEY UPDATE 进行多行插入和更新?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-11 07:06:45461浏览

How Can I Use MySQL's ON DUPLICATE KEY UPDATE for Multiple Row Inserts and Updates?

使用 ON DUPLICATE KEY UPDATE

在 MySQL 中高效插入和更新多行

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn