首页 > 数据库 > mysql教程 > 如何使用 MySQL 的'INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE”在插入新记录时高效更新现有记录?

如何使用 MySQL 的'INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE”在插入新记录时高效更新现有记录?

Susan Sarandon
发布: 2024-12-01 03:42:10
原创
718 人浏览过

How Can I Efficiently Update Existing Records While Inserting New Ones Using MySQL's `INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE`?

使用“INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE”来更新现有记录

将数据插入到某些列可能已经存在的表中时存在,您可能需要用新值更新这些列。 MySQL 使用“ON DUPLICATE KEY UPDATE”子句为此类场景提供了方便的语法。

在您的查询中,您有一个“INSERT INTO”语句,后跟一个“SELECT”语句。目标是将新行插入到“lee”表中并更新与唯一键匹配的现有行。为此,您需要在“ON DUPLICATE KEY UPDATE”子句中指定要更新哪些列。

MySQL 将等号 (=) 之前的部分解释为引用“INSERT INTO”中命名的列”条款。等号后面的部分指的是“SELECT”子句中的列。

例如:

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, 
                inact, inadur, inadist, 
                smlct, smldur, smldist, 
                larct, lardur, lardist, 
                emptyct, emptydur)
SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, 
       t.inact, t.inadur, t.inadist, 
       t.smlct, t.smldur, t.smldist, 
       t.larct, t.lardur, t.lardist, 
       t.emptyct, t.emptydur 
FROM tmp t WHERE uid=x
ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ...
登录后复制

在此查询中,“INSERT INTO”子句中的列是未更新的有“exp_id”、“created_by”、“location”、“animal”、“starttime”和“endtime”。所有其他列,例如“entct”、“inact”、“inadur”、“inadist”等,都会使用“SELECT”子句中的值进行更新。

通过使用正确的语法,您可以在单个查询中执行插入和更新,确保您的数据有效地保持最新。

以上是如何使用 MySQL 的'INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE”在插入新记录时高效更新现有记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板