首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主键的多行插入和重复键

主键的多行插入和重复键
EN

Stack Overflow用户
提问于 2017-10-26 17:12:40
回答 1查看 34关注 0票数 0

在mysql中,我目前有一个insert语句,如下所示(uid是主键)

代码语言:javascript
复制
INSERT INTO test ( uid, datetime, precip, sds ) VALUES (?,?,?,?) on duplicate key update uid = "<uid>";

现在,我需要在mysql中执行多行插入。我需要检查uid是否已经存在,update else insert。由于uid是一个主键,因此每个新行都包含一个新的uid。请让我知道下面的语法是否正确?

代码语言:javascript
复制
INSERT INTO test ( uid, datetime, precip, sds ) VALUES (?,?,?,?), (?,?,?,?), (?,?,?,?), (?,?,?,?), (?,?,?,?) on duplicate key update uid = values(<uid for first record>), uid = values(<uid for second record>), uid = values(<uid for third record>), uid = values(<uid for fourth record>);
EN

回答 1

Stack Overflow用户

发布于 2017-10-26 20:15:50

你的问题不清楚,有两种解释:

第一次解释

如果数据库中已存在主UID,则需要使用备用UID创建新行。

这看起来像你写的“每个新行都包含一个新的uid”的正确解释。但这看起来一点也不自然。

在这方面,ON DUPLICATE KEY UPDATE不是正确的工具,因为它将update现有的原始数据,正如其名称所示,而不是创建新的原始数据。

因此,要实现这一点,您可以正常插入,检查插入是否成功,如果由于重复的uid而失败,则使用备用uid插入。如果它再次冲突,你不确定你想要做什么,在循环中运行它?看起来方向不对。

第二种解释

如果存在具有相同uid的行,则希望进行更新,否则插入一个新的。换句话说,您希望插入一个新行,但只更新现有行(如果它存在)。

这看起来像你写的“我需要检查uid是否已经存在,更新否则插入”和你正在尝试的“在重复键更新上”一样正确的解释。而且它看起来更自然。

要实现这一点,您可以使用ON DUPLICATE KEY UPDATE使用新值update现有行(但不要接触uid),如下所示:

代码语言:javascript
复制
INSERT INTO test ( uid, datetime, precip, sds )
VALUES (?,?,?,?)
ON DUPLICATE KEY UPDATE
    datetime = VALUES(datetime),
    precip = VALUES(precip),
    sds = VALUES(sds)

当您有多个值时,ON DUPLICATE KEY UPDATE语句不会更改。

它显示为“如果该行存在,请更新日期时间、精确度和sds”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46950256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档